当我们在hibernate中进行fetch =“join”和lazy =“true”时会发生什么

时间:2013-10-29 07:30:53

标签: java sql hibernate join

如果我们将获取策略用作“join”,则会触发单个连接查询(通过一个连接查询组合父级和子级),默认行为等同于lazy =“false”。这意味着将立即为父项提取所有子记录。但是,如果我们标记lazy =“true”,那么行为会是什么?由于连接查询是单一的,所以会被懒惰地取出什么?

2 个答案:

答案 0 :(得分:9)

FetchMode Join会覆盖lazy属性。它很容易被忽略。 如果您对Fetchmodes的详细说明感兴趣,请查看here。本文描述了Hibernate fetchmodes及其产生的输出。

答案 1 :(得分:0)

  

对集合或单值关联使用fetch =“join”   映射,你将实际上避免第二个SELECT(因此制作   关联或集合非懒惰),只使用一个“更大”的外部   (对于可空的多对一外键和集合)或内部(对于   not-null多对一外键)加入SELECT以获得拥有权   实体和引用的实体或集合。如果你使用   fetch =“join”表示特定实体的多个集合角色   实例(在“并行”中),您创建一个笛卡尔积(也称为   交叉连接)和两个(懒惰或非懒惰)SELECT可能是   更快。

     

使用lazy =“true”on,并使用映射来启用lazy   加载单个标量值类型的属性(有点异国情调   案件)。需要编译持久性的字节码检测   用于注入拦截代码的类。可以覆盖   具有FETCH所有属性的HQL。

来自https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies。 希望有所帮助