我正在使用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的一個解密並沒有幫助,因爲這裏沒有重複項,我可以手動刪除這些記錄。 。
使用Set作爲您的收藏。 – 2012-03-15 16:07:38
AFAIK LEFT JOIN FETCH和對它的限制是互斥的,因爲限制可能會過濾掉集合中的元素以獲取渴望。也許你在這裏有不同的根本原因 – Firo 2012-03-16 12:00:44
感謝您的答案。一套將解決問題,但是是一個解決辦法,並會產生其他問題(例如排序)。我不知道它是否是互斥的,因爲這種情況是有道理的。我想要在相同的查詢中獲取記錄,而不是使用另一個select語句。如果我僅在不使用FETCH的情況下使用LEFT JOIN,則會發生這種情況。 – Daniel 2012-03-16 15:47:07