0

私はeclipse-link2を使用しており、Parent、Child、ChildInfoの3つのエンティティがあります。親は子供に対して1対多を持っています。子にはChildInfoに対して1対1があります。

  1. 1回の呼び出しですべての子オブジェクトを持つ親を取得したい「親からPを選択左結合フェッチP.childrenwhereP.id =:id」これは、Pに少なくとも1つの子がある場合にのみ結果を返します(私はそれが左だと思ったアウタージョイン)

  2. jpaはナビゲーションp.children.childinfoをサポートしていないため、1回の呼び出しですべての子と所持品のchildinfoも必要ですが、それを実現する方法はありますか?ヒント(QueryHints.FETCH、 "P.children.info")を使用することは、1000を超える子があるかのように適切なオプションではありません。子の情報を取得するために、1,000を超えるSQLクエリが実行されます。また、Child.childinfoにeager-fetchオプションを指定したくはありませんが、クエリレベルでのみ指定します。

どうもありがとう

4

1 に答える 1

0

最初のクエリ (修正された後) は、何も持っていなくても、必ず親とその子を返す必要があります。

select p from Parent p left join fetch p.children where p.id = :id

childInfos をフェッチするには、子にエイリアスを割り当てる必要があります。

select p from Parent p 
left join fetch p.children child
left join fetch child.childInfo
where p.id = :id

私はEclipseLinkの具体的な経験はありませんが、そのようなクエリはHibernateで確実に機能し、知る限り、有効なJPQLです。したがって、EclipseLinkで動作するはずです。

于 2012-05-18T08:04:36.663 に答える