ホームページ  >  記事  >  Java  >  ## Hibernate 基準が FetchType.EAGER で重複した注文を返すのはなぜですか?

## Hibernate 基準が FetchType.EAGER で重複した注文を返すのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 04:18:02428ブラウズ

## Why Does Hibernate Criteria Return Duplicate Orders with 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。