2

我在我的项目(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 使用连接而不是独立查询?

4

2 回答 2

4

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

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

于 2012-08-02T13:06:16.177 回答
2

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

因此,例如,如果您的实体 t 有

@OneToMany public List<RelatedEntity> things;

那么您的查询可以使用:

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

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

于 2012-08-02T04:54:28.770 回答