簡體   English   中英

JPA LazyInitializationException?

[英]JPA LazyInitializationException?

我將jQuery用於UI,將Struts2用於Action,將JPA用於數據訪問層。

我面臨的問題是,當我嘗試從數據庫中檢索值時,我遇到了LazyInitializationException 我得到下面的堆棧跟蹤:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs, no session or session was closed

默認情況下,當Fetch="LAZY" ,代碼可以正常工作。 但是,當我將Fetch類型更改為EAGER ,我不知道該做什么。 我被困在中間。

如錯誤消息所述,當您嘗試訪問集合時,休眠會話已經關閉。 解決方案是確保會話仍處於打開狀態(如果您使用的是JTA,則在事務提交時會話將關閉),或者不使用延遲加載(如您所知)。

I don't know what I have to do further.

我擴展Zareth的答案,因為這是一個普遍的問題。

一件事做的就是理解的是,當fetch=FetchType.LAZY聲明的映射ctfTxnAttribs ,那么JPA會加載代理對象的集合:每個對象似乎是一個ctfTxnAttrib ,但只是一個代理。

直到您的網頁或bean嘗試訪問該集合中的對象之前,這似乎都可以正常工作。 然后,您將得到lazyInitializationException因為持久性提供程序僅找到代理。

正如Zareth所指出的,您需要一個開放的持久性會話,以使用ctfTxnAttrib實際實例填充代理集合。

有多種方法可以實現此目的,這是一篇有關該主題的非常好的文章,包括設計模式Open Session In View

http://www.javacodegeeks.com/2012/07/four-solutions-to-lazyinitializationexc_05.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM