hibernate fetch 和lazy
经过测试发现Hibernate annotation中@ManyToOne,@OneToMany,@OneToOne中lazy的默认值是不同的
@OneToMany默认Lazy为true
@ManyToOne,@OneToOne默认lazy为false
在设置@ManyToOne的时候我们一般都会设置Lazy=true
一般不会在@ManyToOne,@OneToOne考虑这个问题
但实际hibernate进行load是时候是把一端也load出来的
fetch 和 lazy 主要是用来级联查询的而 cascade 和 inverse 主要是用来级联插入和修改的
fetch参数指定了关联对象抓取的方式是select查询还是join查询,
select方式时先查询返回要查询的主体对象(列表),再根据关联外键 id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。
另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用 select方式,除非你在hql中指定join fetch某个关联对象。
fetch策略用于定义 get/load一个对象时,如何获取非lazy的对象/集合。 这些参数在Query中无效。
相关推荐
zhaojp0 2020-06-27
zlsdmx 2020-04-25
keepdoingit 2020-04-17
Magicsoftware 2020-03-28
李永毅 2020-03-08
星空下的程序猿 2020-02-24
就是那个胖子 2020-01-07
xubzhlin 2019-12-29
春雨的雕刻时光 2019-12-11
TONIYH 2019-11-13
heimu 2017-04-05
haoshuai 2019-04-25
heihahu 2016-08-12
dldx0 2013-02-19
Deng0web 2012-09-01
okokyu 2015-08-02
zry 2012-01-10