web-dev-qa-db-ja.com

(遅延)Hibernate Criteria APIを使用したLEFT OUTER JOIN

Criteria APIを使用して、2つのテーブル間でLEFT OUTER JOINを実行したい。 Hibernateドキュメントで見つけることができるのは、このメソッドだけです。

Criteria criteria = this.crudService
            .initializeCriteria(Applicant.class)
            .setFetchMode("products", FetchMode.JOIN)
            .createAlias("products", "product");

ただし、返される結果の数が多いため、これは内部結合または右外部結合を実行します。

私はまた、私が怠惰であることを望んでいます。これどうやってするの?

乾杯!

PDATE:エイリアスを使用すると、INNER JOINが自動的に作成されるようです。まだ把握していない「裏話」に何かあります。したがって、今日はエイリアスはありません。 2つのテーブルには両方とも列(または適切な場合はプロパティ)があるため、2つのテーブルに制限を適用するという問題が残ります 'name '。

22

製品テーブルに左結合する必要がある場合は、次のようにします。

..... createAlias( "products"、 "product"、Criteria.LEFT_JOIN);

37
sdavids

Sdavids回答のAPIはdeprecatedになりました。その更新バージョンは

.... createAlias( "employee"、 "emp"、JoinType.LEFT_OUTER_JOIN)

23
Ankit Sharma

結合はSQL要求にあります。怠惰になることはできません。


Hibernateでは、このデータを遅延して取得するには、HQLリクエストからデータを除外するだけです。次に、エンティティのゲッターにアクセスすると(セッションがまだ開いている場合)、自動的に読み込まれます(リクエストのその部分を記述する必要はありません)。

0
KLE