前言
最近開發項目比較忙,Spring Cloud的筆記得稍稍放放了,下午出來個bug,惡心的不行,功能很簡單,也沒有什么級聯或復雜的映射關系,就是一直在報三個異常
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.shunneng.core.web.rest.util.Result["data"]->com.shunneng.flup.web.rest.dto.SaveFlupDTO["flupForm"]->com.shunneng.flup.domain.FlupForm_$$_jvst158_3["handler"])
2018-05-14 16:54:44,571 ERROR XNIO-2 task-3 c.s.c.w.r.e.ExceptionTranslator:159 - JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain:
org.hibernate.lazyinitializationexception could not initialize proxy - no session
這些異常是最后的這個異常導致的,網上找了很多,都說是jpa或hibernate的延遲加載
搞的鬼,解決方法無非就是幾種,分別貼出與各位分享之
正文
五個解決方案
1、關閉LazyInitialization
, 將fetch
設成eager
,可以在配置文件,也可注解
2、在spring boot
的配置文件application.properties
添加spring.jpa.open-in-view=true
,yml同理
3、用spring 的OpenSessionInViewFilter
4、在spring boot
的配置文件application.properties
添加spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
上述幾種,因為用的是springboot項目,只能用注解比較方便,都沒有成功,就不詳寫了。介紹下面的方法,我是在一個國外網站找到的
5、在出問題的實體類上加@Proxy(lazy = false)
這里copy下機翻,英語好的可以直接移步文章出處
有情況,當我們想要一個簡單的解決方案時,並不關心性能方面的任何事情,例如為了測試或原型設計的目的。在這種情況下,您可以在應用程序中進行以下配置更改以避免此錯誤,但請記住,如果此代碼進入生產環境,則預先初始化可能導致的影響。
如果您使用XML配置:將
default-lazy =“false”
添加到您的 元件
如果您使用注釋配置:將@Proxy(lazy = false)
添加到所有實體類。這就是如何修復線程“main”中的異常
org.hibernate.LazyInitializationException:無法初始化代理 - 沒有會話
。我們已經看到,這個錯誤主要出現在關閉連接並嘗試訪問未完全初始化的代理對象時。由於代理對象需要連接,因此可以將對象重新連接到會話,或者小心避免編寫代碼,這些代碼訪問未初始化的代理對象。避免
LazyInitializationException
的另一種方法是通過使用lazy =“false”
來禁用實體類的hibernate的懶惰初始化功能或者使用default-lazy =“false”
完全禁用它。由於性能原因,此解決方案不推薦用於生產用途,但可用於原型設計,測試和演示。當你從Hibernate 2.1升級到3.0時,如果你第一次看到這個錯誤,不要感到驚訝,因為這是Hibernate默認啟用延遲初始化時的版本。如果您在任何其他場景中遇到此錯誤或嘗試解決
“org.hibernate.LazyInitializationException:無法初始化代理 - 無會話”
,您也可以在此處發布錯誤和代碼,我們可以一起看看。
2018-05-29 最新更新,有時候還有種出現這種問題的可能是,findOne方法等寫成了getOne等……
本文僅作記錄,寫文幫助更多人,轉載還望注明出處http://www.cnblogs.com/hellxz/p/9037597.html