在Hibernate中EAGER型多取我有一個包含一個實體:與JPA
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
@OrderBy(value = "order ASC")
private List<AssessmentPart> assessmentParts = new LinkedList<>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
private List<AssessmentText> texts = new LinkedList<>();
,你看到有哪些需要即時加載兩個集合。這不起作用,休眠引發異常:
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
這是因爲Hibernate無法一次獲取多個集合。但是,如果我將List
更改爲Set
和LinkedList
更改爲HashSet
此部分工作正常,但另一個 - 更惱人的問題發生。
當我試圖使用從數據庫中獲取的實體:
entityManager.find(entityClass, primaryKey);
它失敗:
org.hibernate.AssertionFailure: null identifier
我相信,ID我傳遞給find
方法不爲空,我已經調試過,我確信這一點。它不知何故在Hibernate中消失。
如果我將集合類型更改爲LAZY
所有內容都可以正常工作,但在某些情況下,我需要使用EAGER
。
有沒有人有解決方案如何解決它?要麼我可以有一套,但防止發生斷言錯誤,或者我可以有一個列表,但不知何故避免多個提取袋錯誤。
我使用:
Hibernate 4.2.2.Final
Tomcat 7
JPA 2.0
JDK 1.7
編輯
我剛剛發現加入@Fetch(FetchMode.SELECT)
修復的問題,我可以使用多個列表與EAGER
類型,但反正是有解決這個問題通過不使用Hibernate特定的註釋?爲什麼它首先解決了這個問題?
有一個答案,確切地說......你應該接受他的答案......只是說。 –