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