Hibernate中FetchMode和JoinType的区别是什么?
我有一个检索父项及其所有子项的条件查询。但是hibernate正在启动多个查询来获取子对象。我在创建条件时使用了默认的InnerJoin获取,并尝试设置fetchMode.Join。但什么都不管用 那么,FetchMode.Join和JoinType之间的区别是什么呢。我认为Jointype本身就足以在一个查询中从两个表中获取数据。但事实是这样吗 其次,当criteria query将触发多个查询以获取子实体时。Hibernate中FetchMode和JoinType的区别是什么?,hibernate,jpa,Hibernate,Jpa,我有一个检索父项及其所有子项的条件查询。但是hibernate正在启动多个查询来获取子对象。我在创建条件时使用了默认的InnerJoin获取,并尝试设置fetchMode.Join。但什么都不管用 那么,FetchMode.Join和JoinType之间的区别是什么呢。我认为Jointype本身就足以在一个查询中从两个表中获取数据。但事实是这样吗 其次,当criteria query将触发多个查询以获取子实体时。@fetch(FetchMode.JOIN)表示将使用JOIN SQL查询检索相关实
@fetch(FetchMode.JOIN)
表示将使用JOIN SQL查询检索相关实体,但这也打破了惰性,这意味着即使您将子实体标记为fetch=FetchType.LAZY
也无法工作。为了防止二次查询,请使用join fetch
-
我也不建议使用@Fetch
后续阅读:Java持久化与Hibernate。第2版
-15.4.5带联接的动态获取
:
查询忽略您在映射中定义的任何获取策略
带有@org.hibernate.annotations.Fetch的元数据。例如,映射
包含org.hibernate.annotations.FetchMode.JOIN的bids集合
对您编写的查询没有影响。网络的动态抓取策略
您的查询忽略全局抓取策略。另一方面
Hibernate不会忽略映射的获取计划:Hibernate始终
考虑FetchType.EAGER,您可能会看到几个额外的SQL语句
执行查询时的语句
正如您所知-EAGER
不适用于查询-
它几乎总是生成额外的查询,因此,这就是您的问题的答案-当criteria查询将触发多个查询以获取子对象时?
@fetch(FetchMode.JOIN)
说将使用JOIN SQL查询来检索相关实体,但它也打破了惰性,这意味着即使您将子实体标记为fetch=FetchType.LAZY
它也不会工作。为了防止二次查询,请使用join fetch
-
我也不建议使用@Fetch
后续阅读:Java持久化与Hibernate。第2版
-15.4.5带联接的动态获取
:
查询忽略您在映射中定义的任何获取策略
带有@org.hibernate.annotations.Fetch的元数据。例如,映射
包含org.hibernate.annotations.FetchMode.JOIN的bids集合
对您编写的查询没有影响。网络的动态抓取策略
您的查询忽略全局抓取策略。另一方面
Hibernate不会忽略映射的获取计划:Hibernate始终
考虑FetchType.EAGER,您可能会看到几个额外的SQL语句
执行查询时的语句
正如您所知-EAGER
不适用于查询-
它几乎总是生成额外的查询,所以,这就是问题的答案-什么时候条件查询将触发多个查询来获取孩子?