【问题标题】:Hibernate Fetch Join still firing selectsHibernate Fetch Join 仍然触发选择
【发布时间】:2015-10-28 10:44:24
【问题描述】:

我有一个带有 Child OneToOne 关系的 Hibernate Parent 对象:

@OneToOne
@Fetch(FetchMode.JOIN)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumns({
    @JoinColumn(name="column_a", referencedColumnName="column_a", insertable = false, updatable = false),
    @JoinColumn(name="column_b", referencedColumnName="column_b", insertable = false, updatable = false),
    @JoinColumn(name="column_c", referencedColumnName="column_c", insertable = false, updatable = false)
   })
   public Child getChild()
   {
      return child;
   }

子信息可能并不总是可用。如果相关信息可用,我希望始终返回父对象并初始化子对象。

我尝试使用以下 HQL 来检索父对象列表:

String queryString = "select parent from Parent parent"
                  + " left join fetch parent.child child "
                  + " where parent <.... meets criteria> "
EntityManager em = getEntityManager();
Query query = em.createQuery(queryString);
query.setParameter(<set parameters...>);
query.getResultList();

当我查看此 HQL 生成的 SQL 时,它在原始 SELECT 之后为每个 Child 执行单独的 SELECT。

如果 FetchMode 设置为 JOIN 并且在 HQL 查询中明确设置了左连接提取,谁能指出为什么会发生这种情况?

【问题讨论】:

    标签: java oracle hibernate jpa persistence


    【解决方案1】:

    你的孩子班也有一些联想吗? 请参考下面的链接,这可能对您有所帮助。

    Avoiding n+1 eager fetching of child collection element association

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2012-08-31
      • 2011-10-13
      • 2017-08-10
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多