2

データベースから概要を選択するには、次のようなステートメントを使用する必要があります。

select a1.begin, a1.end, b1.name, c1.name, d1.name, e1.name, f1.name, ...
from a2, b1, b2, c1, c2, a1
left outer join (d1 join d2 on d2.id = d1.parent and d1.user = ?) on
     d1.deleted = 0 and d1.parent = a1.d1_id
left outer join (e1 join e2 on e2.id = e1.parent and e1.user = ?) on
     e1.deleted = 0 and e1.parent = a1.e1_id
left outer join (f1 join f2 on f2.id = f1.parent and f1.user = ?) on
     f1.deleted = 0 and f1.parent = a1.f1_id
where ....  a lot more stuff...

ステートメントは魔法のように機能し、データベースはそれを非常に高速に処理するのに問題はありません。信じてください。必要なデータを取得する方法は他にありません。

今までは、私たちの Java プロジェクトには純粋な EJB-QL や SQL の言葉さえも持っていないことを誇りに思っていました。しかし、CriteriaBuilder を使用してそのようなステートメントを作成する方法があるかどうかはわかりません。複数の基準を使用して外部結合を作成する方法、またはネストされた内部結合を使用して外部結合を作成する方法がまったくわかりません。

どんなヒントでも大歓迎です。

ありがとうヘネス

4

2 に答える 2

0

最初の参加:

criteria=session.createCriteria(mappingClass.class).createAlias("propertyName","firstAliasName");

2 番目の結合:

criteria.createAlias("firstAliasName.propertyName","secondAliasName");

等々。

マップされたリレーションで参加している場合、これで OFC が実行されます。そうでない場合は、これをお読みください: Criteria API 。そのようなことを行う最も簡単な方法は、HPQLまたはJPQLによるものだと思いますが、おそらく結果としてマップされたエンティティを取得せず、列を持つResultSetのみを取得します(ただし、とにかく取得しないと思います)

于 2013-10-24T10:00:21.323 に答える
0

オブジェクト モデルを知らずに特定のヘルプを提供することは困難ですが、結合メソッドを使用して結合タイプを指定したいと考えています。これを使用すると、指定した属性マッピングで定義された関係を使用する結合をネストできます。基準 API のアクションの説明は、ここにあります: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#Join

Eclipselink は、機能https://bugs.eclipse.org/bugs/show_bug.cgi?id=367452を通じて、JPQL の「on」句と条件クエリもサポートしています。

于 2013-10-24T11:27:11.473 に答える