首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate fetch 跟lazy

2012-08-24 
hibernate fetch 和lazy?经过测试发现Hibernate annotation中@ManyToOne,@OneToMany,@OneToOne中lazy的默

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中无效。

热点排行