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

joinクエリでは、 とを使用しfetchてクエリを自分で作成できます。

たとえば、エンティティ t に

@OneToMany public List<RelatedEntity> things;

次に、クエリを使用できます。

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

JPQL (Java Persistence Query Language) のドキュメントを読んでください。

于 2012-08-02T04:54:28.770 に答える