首頁  >  文章  >  Java  >  ## 為什麼 Hibernate Criteria 使用 FetchType.EAGER 回傳重複訂單?

## 為什麼 Hibernate Criteria 使用 FetchType.EAGER 回傳重複訂單?

Linda Hamilton
Linda Hamilton原創
2024-10-26 04:18:02428瀏覽

## Why Does Hibernate Criteria Return Duplicate Orders with FetchType.EAGER?

Hibernate Criteria 使用FetchType.EAGER 返回重複訂單

問題:

設置時將訂單的orderTransactions 清單的類型取得為FetchType.EAGER,為什麼訂單在使用Criteria 檢索到的結果清單中出現多次?

答案:

此行為是預期的。使用 FetchType.EAGER,執行連線以急切地取得 orderTransactions。這會產生與標準 SQL 連線相同數量的結果,其中每個訂單都會出現在每個對應 orderTransaction 的結果集中。

要理解這一點,請考慮產生的SQL 語句:

SELECT o.*, l.* from ORDER o LEFT OUTER JOIN LINE_ITEMS l ON o.ID = l.ORDER_ID

在該語句中,對於每個訂單,都會檢索所有相關的訂單項,從而導致結果集中出現同一訂單的多個實例。

取得不同結果的解決方案:

要使用FetchType.EAGER 過濾掉重複結果,可以使用維護插入順序的Collection 類型,例如LinkedHashSet:

Collection<Order> result = new LinkedHashSet( session.createCriteria(Order.class)
    .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()))
    .list() );

以上是## 為什麼 Hibernate Criteria 使用 FetchType.EAGER 回傳重複訂單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn