2012-03-15 63 views
9

我正在使用HQL查詢獲取某些記錄。如果我使用LEFT JOIN FETCH,則在我的目標實體中的集合將包含重複記錄。如果我只使用左連接,它不會。我猜當Hibernate懶洋洋地加載記錄時,它會避免重複。使用左連接獲取的副本

"SELECT z FROM ", TableA.TABLE_NAME, " z ", // 
      "LEFT JOIN FETCH z.attributeX pv ", // 
      "LEFT JOIN FETCH pv.attributeY anteil ", // 
      "LEFT JOIN FETCH z.attributeB kma ", // 
      "LEFT JOIN FETCH kma.attributeC ", // 
      "WHERE anteil.attributeD.attributeE.id = :eId ", // 
      "AND pv.attributeG.id = :gId "); 

我的實體表A有一個鏈接到TablePV(LEFT JOIN FETCH z.attributeX PV)

TablePV具有TableY的集合(「LEFT JOIN FETCH pv.attributeY anteil)

現在Hibernate會正確映射除TablePV的子項外的所有內容,它將包含幾次相同的記錄。對TableA的一個解密並沒有幫助,因爲這裏沒有重複項,我可以手動刪除這些記錄。 。

+0

使用Set作爲您的收藏。 – 2012-03-15 16:07:38

+0

AFAIK LEFT JOIN FETCH和對它的限制是互斥的,因爲限制可能會過濾掉集合中的元素以獲取渴望。也許你在這裏有不同的根本原因 – Firo 2012-03-16 12:00:44

+0

感謝您的答案。一套將解決問題,但是是一個解決辦法,並會產生其他問題(例如排序)。我不知道它是否是互斥的,因爲這種情況是有道理的。我想要在相同的查詢中獲取記錄,而不是使用另一個select語句。如果我僅在不使用FETCH的情況下使用LEFT JOIN,則會發生這種情況。 – Daniel 2012-03-16 15:47:07

回答

-1

在您的查詢中嘗試使用DISTINCT,類似SELECT DISTINCT z FROM Entity z...

+3

正如我的問題所述,這並不能解決問題。問題是,集合包含重複項,而不是主要實體本身。 – Daniel 2012-10-02 12:27:37