Lazy=”” :告诉hibernate什么时候抓取
1 false :立即抓取,查询此对象同时查询关联对象
2 proxy :不立刻抓取关联对象
3 no
Fetch:告诉Hibernate通过什么方式抓取
1 select (缺省) :通过select抓取(相关联的两个对象通过两条select 语句查询)
2 join :通过join方式将关联的数据都查出来(效率比较高)||此时lazy没有什么意义了,都join了
这两个字段相互牵制
也就是说,懒加载对效率的影响非常之大!一对一只是同时多查出一个关联对象,但是如果是一对多,多对一,甚至是多对多那效率就差别大了!!如果一对多lazy=”false”或者fetch=”join”会同时查询出所有关联的对象,对数据库和对网络影响将是很大地。(lazy=”false” 采用多条查询语句,比如,一对100:会有可能101条select查询语句;fetch=”join” 会同时访问两个表的)
但是代理对象调用getClass()和getId()方法的时候不会立刻加载,.class和id的信息是随对象的!
懒加载必须和session关联,但是很多时候我们用加载都是在session关闭的情况下那怎么办呢?
1 false :立即抓取,查询此对象同时查询关联对象
2 proxy :不立刻抓取关联对象
3 no
Fetch:告诉Hibernate通过什么方式抓取
1 select (缺省) :通过select抓取(相关联的两个对象通过两条select 语句查询)
2 join :通过join方式将关联的数据都查出来(效率比较高)||此时lazy没有什么意义了,都join了
这两个字段相互牵制
也就是说,懒加载对效率的影响非常之大!一对一只是同时多查出一个关联对象,但是如果是一对多,多对一,甚至是多对多那效率就差别大了!!如果一对多lazy=”false”或者fetch=”join”会同时查询出所有关联的对象,对数据库和对网络影响将是很大地。(lazy=”false” 采用多条查询语句,比如,一对100:会有可能101条select查询语句;fetch=”join” 会同时访问两个表的)
但是代理对象调用getClass()和getId()方法的时候不会立刻加载,.class和id的信息是随对象的!
懒加载必须和session关联,但是很多时候我们用加载都是在session关闭的情况下那怎么办呢?