![](/img/trans.png)
[英]What is the difference between JOIN and JOIN FETCH when using JPA and Hibernate
[英]What happens when we make fetch=“join” and lazy=“true” in hibernate
如果我们将获取策略用作“join”,则会触发单个连接查询(通过一个连接查询组合父级和子级),并且默认行为等同于lazy =“false”。 这意味着将立即为父项提取所有子记录。 但是,如果我们标记lazy =“true”,那么行为会是什么? 由于连接查询是单一的,可以懒得取出什么?
FetchMode Join会覆盖惰性属性。 它很容易被忽略。 如果您对Fetchmodes的详细解释感兴趣,请看这里 。 本文描述了Hibernate fetchmodes及其产生的输出。
通过对集合或单值关联映射使用fetch =“join”,您实际上将避免使用第二个SELECT(因此使关联或集合非惰性),只使用一个“更大”的外部(对于可以为空的多个 - 一个外键和集合)或内部(对于非空多对一外键)连接SELECT以获取拥有实体和引用的实体或集合。 如果对特定实体实例使用fetch =“join”作为多个集合角色(在“并行”中),则创建一个笛卡尔积(也称为交叉连接),两个(惰性或非惰性)SELECT可能是快点。
使用lazy =“true”on和mappings来启用单个标量值类型属性的延迟加载(有点奇特的情况)。 需要使用编译的持久化类的字节码检测来注入拦截代码。 可以使用FETCH ALL PROPERTIES在HQL中覆盖。
来自https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies 。 希望它有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.