hibernate基準で可能ですか?
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
私はまったく同じ問題を抱えており、次のように解決することができました:
return criteria.createCriteria(A.class)
.createCriteria("b", "join_between_a_b")
.createCriteria("c", "join_between_b_c")
.createCriteria("d", "join_between_c_d")
.add(Restrictions.eq("some_field_of_D", someValue));
注:上記のコードの"b"
、"c"
、および"d"
は、それぞれA
、B
、およびC
クラスの属性名を参照しています。 (クラスA
には属性b
などがあります)。
このソリューションでは、A.hbm.xml
にlazy
およびfetch
パラメーターを設定する必要はありません。
Hibernateリファレンスマテリアル には、setFetchModeを使用して外部結合との関連付けをフェッチすることを示すいくつかの良い例があります。
例は次のとおりです。
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
さまざまなフェッチ戦略に関する情報 もあります。これはあなたに役立つかもしれません。
次のように、条件でフェッチモードを設定してみてください。
criteria.setFetchMode(..., FetchMode.EAGER)
これにより、結合クエリが作成されます。あなたはより多くの詳細を見つけるかもしれません ここ 。
はい、実際、これを行うにはいくつかの方法があります。