【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

前言

最近开发项目比较忙,Spring Cloud的笔记得稍稍放放了,下午出来个bug,恶心的不行,功能很简单,也没有什么级联或复杂的映射关系,就是一直在报三个异常html

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的延迟加载搞的鬼,解决方法无非就是几种,分别贴出与各位分享之java

正文

五个解决方案

一、关闭LazyInitialization, 将fetch设成eager,能够在配置文件,也可注解

二、在spring boot的配置文件application.properties添加spring.jpa.open-in-view=true,yml同理

三、用spring 的OpenSessionInViewFilter

四、在spring boot的配置文件application.properties添加spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

上述几种,由于用的是springboot项目,只能用注解比较方便,都没有成功,就不详写了。介绍下面的方法,我是在一个国外网站找到的web

五、在出问题的实体类上加@Proxy(lazy = false) 这里copy下机翻,英语好的能够直接移步文章出处

有状况,当咱们想要一个简单的解决方案时,并不关心性能方面的任何事情,例如为了测试或原型设计的目的。在这种状况下,您能够在应用程序中进行如下配置更改以免此错误,但请记住,若是此代码进入生产环境,则预先初始化可能致使的影响。spring

若是您使用XML配置:将default-lazy =“false”添加到您的 元件
若是您使用注释配置:将@Proxy(lazy = false)添加到全部实体类。springboot

这就是如何修复线程“main”中的异常org.hibernate.LazyInitializationException:没法初始化代理 - 没有会话。咱们已经看到,这个错误主要出如今关闭链接并尝试访问未彻底初始化的代理对象时。因为代理对象须要链接,所以能够将对象从新链接到会话,或者当心避免编写代码,这些代码访问未初始化的代理对象。session

避免LazyInitializationException的另外一种方法是经过使用lazy =“false”来禁用实体类的hibernate的懒惰初始化功能或者使用default-lazy =“false”彻底禁用它。app

因为性能缘由,此解决方案不推荐用于生产用途,但可用于原型设计,测试和演示。当你从Hibernate 2.1升级到3.0时,若是你第一次看到这个错误,不要感到惊讶,由于这是Hibernate默认启用延迟初始化时的版本。若是您在任何其余场景中遇到此错误或尝试解决“org.hibernate.LazyInitializationException:没法初始化代理 - 无会话”,您也能够在此处发布错误和代码,咱们能够一块儿看看。dom

引用文章:Dealing with org.hibernate.LazyInitializationException: could not initialize proxy - no Session in Hibernate Javaspring-boot

2018-05-29 最新更新,有时候还有种出现这种问题的多是,findOne方法等写成了getOne等……性能

本文仅做记录,写文帮助更多人,转载还望注明出处http://www.cnblogs.com/hellxz/p/9037597.html

相关文章
相关标签/搜索