ホームページ >Java >&#&チュートリアル >## Hibernate 基準が FetchType.EAGER で重複した注文を返すのはなぜですか?
Hibernate 条件が FetchType.EAGER で重複した注文を返す
質問:
注文の orderTransactions リストのタイプを FetchType.EAGER にフェッチすると、Criteria を使用して取得された結果のリストに注文が複数回表示されるのはなぜですか?
回答:
この動作は次のとおりです。期待される。 FetchType.EAGER を使用すると、結合が実行されて orderTransaction を積極的にフェッチします。これにより、標準 SQL 結合と同じ数の結果が得られます。各注文は、対応する orderTransaction ごとに結果セットに存在します。
これを理解するには、生成される SQL ステートメントを考慮してください。
SELECT o.*, l.* from ORDER o LEFT OUTER JOIN LINE_ITEMS l ON o.ID = l.ORDER_ID
このステートメントでは、すべての注文について、関連するすべての明細項目が取得され、結果セット内に同じ注文の複数のインスタンスが生成されます。
明確な結果を取得するための解決策:
FetchType.EAGER で重複した結果を除外するには、LinkedHashSet:
Collection<Order> result = new LinkedHashSet( session.createCriteria(Order.class) .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow())) .list() );など、挿入順序を維持するコレクション タイプを使用できます。
以上が## Hibernate 基準が FetchType.EAGER で重複した注文を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。