我有一個與B類具有一對多關係的類A & C.我已經將fetchType設置爲EAGER,這導致了JPA中的多包提取問題。現在有兩種方法可以解決我所知道的問題。要麼我保持提取類型Eager &將它們從List更改爲Set,這對我來說是OK的,或者將fetchType更改爲「lazy」,並使用join查詢來EAGER獲取關係。什麼是推薦的方法?使用fetch join或EAGER解決休眠多包提取問題?
3
A
回答
1
我寧願去取集合(雖然單個提取的限制存在於查詢中,但如果你使用休眠),因爲變化是你有時希望列出所有A對象而不想要B & C.個人I大多數情況下使用列表,因爲我想直接將集合顯示到jsf數據表(不能處理集合),並且我不得不通過在後端手動讀取集合來初始化集合,而不是在集合不止一個集合時讀取集合。
3
「多袋JPA獲取問題」
指出,他們沒有「多袋JPA獲取問題」,這是與Hibernate的特定問題。其他JPA提供者沒有這個問題,並且JPA完全允許你有多個EAGER OneToMany關係。
1
在渴望集合獲取時,默認情況下,Hibernate「交叉連接」根和集合表。這可能會導致重複的根元素被返回,這可能不需要。三種可能的解決方案:
- 不急於獲取;
- 使用FetchMode.SELECT強制執行選擇獲取(仍然渴望但沒有聯合提取);或
- 將結果散列到Set中。建議設置方法,前提是您絕對需要始終附加說明集。即使使用額外的散列步驟,聯合提取的性能也要優於選擇提取,這實際上毫無成本。
0
考慮將集合映射爲列表而不是包。這是通過只添加@org.hibernate.annotations.IndexColumn
或自JPA 2.0開始,更喜歡@javax.persistence.OrderColumn
相關問題
- 1. 休眠EAGER提取
- 2. 休眠查詢 - 解決財產問題
- 3. 休眠時JOIN和JOIN FETCH之間的區別
- 4. 休眠「JOIN ... ON」?
- 5. 休眠多協會問題
- 6. 休眠中的懶取指策略與Eager取指策略?
- 7. 休眠一對多問題
- 8. 休眠問題
- 9. 使用休眠解決SQL方言
- 10. 休眠問題
- 11. 問題(休眠)
- 12. 休眠問題
- 13. 休眠問題
- 14. 問題在休眠
- 15. 休眠OneToOne和懶惰獲取問題
- 16. 休眠與Kotlin:@ManyToOne(fetch = FetchType.LAZY)
- 17. 休眠標準一對多問題
- 18. 休眠noob獲取連接問題
- 19. 傑克遜+休眠=很多問題
- 20. 休眠StalestateException問題
- 21. 休眠C3P0問題
- 22. 瞭解休眠取指
- 23. 休眠一對多映射註解問題
- 24. 休眠問題(javax.persistence.PersistenceException:org.hibernate.PersistentObjectException)
- 25. 雞或蛋類休眠映射問題
- 26. 休眠連接提供程序問題
- 27. oracle10g休眠問題
- 28. Nhibernate QueryOver在Eager Fetch中使用別名
- 29. 休眠Session.save問題
- 30. 問題在休眠
其他供應商沒有這種袋子的概念,所以這是一個稻草人的論點。 –