2017-08-21 23 views
0

我見過這個問題問了很多,我知道它爲什麼會發生,我只是有問題試圖解決它在我的具體情況。「未能在Hibernate中懶洋洋地初始化一個角色集合」

我正在從使用XML文件將Hibernate的數據庫表映射到使用Hibernate註釋的項目轉換項目。只要我使用基本的Java類型(原語或基類的類版本,例如int或Integer),一切都會順利。但是當談到我的班級有另一個班級的成員時,事情就會向南。

一種類型的問題是當我有OnetoMany關係。

在foo的XML文件是這樣說:

<set inverse="true" name="barList"> 
    <key> 
     <column name="foo_id"/> 
    </key> 
    <one-to-many class="com.me.model.dao.Bar" /> 
</set> 

在轉換這一個註釋,我結束了這一點:

@OneToMany 
@JoinTable(name = "bar", inverseJoinColumns = @JoinColumn(name = "foo_id")) 
public Set<Bar> getBarList() { 
    return barList; 
} 

我試過這個其他變化(包括有一個JoinColumn),我知道它的立場可能是不完整的,但正如我所說,我無法找到一個適當的解決方案,擺脫懶惰的初始異常,當我在視圖中的對象工作我的MVC。據說FetchType.EAGER是一種解決方法,而不是解決方案,但奇怪的是,解決方案並未提供。也許需要更多的信息。

  • 我的MVC是Wicket 1.4.17。
  • 我的應用程序服務器是Widlfly(即沒有web.xml中)
  • Java版本是8
  • 休眠,基於Maven POM
    • 神器:冬眠
    • 版本:3.5.0.ga
    • 神器:EJB3持久性
    • 版本:1.0.1.GA

編輯:當barList出現在foo類中時,可能會有所幫助,但是在數據庫中沒有任何類型的參考可以在foo中禁止。 foo表有一個bar_id。

+0

假設你想做雙向一對多和多對一的雙向?!我們可以只使用註解嗎?! –

+0

它們已經在XML中雙向映射,但我試圖一次將一個類轉換爲註釋。這些類中的很多類與複雜對象之間的關係非常複雜,所以我試圖一點點地跟蹤和修復錯誤。暫時的混合XML /註釋似乎對於更簡單的關係而言是可以接受的 - 在雙向映射之前,我可以使用一個類來工作,並且可以開始轉換另一個類。 – sorinev

+0

您必須發佈關於會話/事務處理的內容。也許問題在於,只要您從存儲庫獲取實體,會話就會執行延遲加載。 (在spring-webflow中存在這個問題,忘記了標籤) – Turo

回答

0

其實,註釋有助於使映射更加簡單和容易。對XML或註解也相同的想法(使Hibernate來了解我們的對象的關係)。在這種情況下,映射只是簡單的喜歡:

@OneToMany(mappedBy="foo") 
    private Set<Bar> barList; 

對於整個細節,這個樣品看起來像你一樣:https://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/

希望這有助於。

+0

我想我應該提到,雖然Bar類有一套Foos,但Foo類有一個Bar,並且在數據庫中,Bar表沒有提及Foo,但是Foo確實有一個外鍵ID to Bar 。我認爲這個怪癖是我搞砸的一部分。 – sorinev

+0

我不確定我是否正確閱讀。但在我的問題看到的代碼是富擁有一套 @OneToMany @JoinTable(NAME = 「酒吧」,inverseJoinColumns = @JoinColumn(NAME = 「foo_id」)) 公共設置 getBarList(){ 回報barList; }。 –

0

我認爲這取決於你的事務管理的配置,因爲當你使用未加載FetchType.LAZY你懶的列表,直到它的getter方法調用它。 所以,如果你調用getter方法提交事務後,此異常拋出。 請檢查您的交易配置或送到這裏的代碼部分。

相關問題