【问题标题】:How to force JPA(eclipselink) to use joins instead of independent queries?如何强制 JPA(eclipselink) 使用连接而不是独立查询?
【发布时间】:2012-08-02 04:29:22
【问题描述】:

我在我的项目(eclipselink 提供程序)中使用 JPA 2,我遇到了以下问题:

当我执行以下代码时:

em.createQuery("select t from " + entityName  + " t where t.id = ?1"
).setParameter(1, id)
.setHint(QueryHints.REFRESH, HintValues.TRUE)
.setHint(QueryHints.REFRESH_CASCADE, CascadePolicy.CascadeAllParts)
.getSingleResult();

JPA 生成大量查询来获取所有依赖对象(即大约 90 个查询来获取实体)。 有什么方法可以强制 JPA 使用连接而不是独立查询?

【问题讨论】:

    标签: jpa eclipselink


    【解决方案1】:

    您可以使用连接提取或批量提取来优化关系。此外,您应该在关系上使用 LAZY 以避免在不需要时加载它们。

    看, http://java-persistence-performance.blogspot.com/2010/08/batch-fetching-optimizing-object-graph.html

    【讨论】:

      【解决方案2】:

      在您的查询中,您可以使用joinfetch 自己构建查询。

      例如,如果您的实体 t 有一个

      @OneToMany public List<RelatedEntity> things;
      

      那么您的查询可以使用:

      select t from entityName t join fetch t.things where t.id = ?1
      

      阅读 JPQL(Java 持久性查询语言)的文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        相关资源
        最近更新 更多