我在我的项目中使用JPA 2(eclipselink提供程序),我遇到以下问题:
当我执行以下代码时:
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使用连接而不是独立查询?
答案 0 :(得分:4)
您可以使用连接提取或批量提取来优化关系。此外,你应该在你的人际关系中使用LAZY,以避免在不需要时加载它们。
请参阅, http://java-persistence-performance.blogspot.com/2010/08/batch-fetching-optimizing-object-graph.html
答案 1 :(得分:2)
在您的查询中,您可以使用join
和fetch
自行构建查询。
例如,如果您的实体有
@OneToMany public List<RelatedEntity> things;
然后您的查询可以使用:
select t from entityName t join fetch t.things where t.id = ?1
阅读JPQL(Java持久性查询语言)文档。