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

前言

最近开发项目比较忙,springcloud的笔记得稍稍放放了,下午出来个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:无法初始化代理 - 无会话”,您也可以在此处发布错误和代码,我们可以一起看看。

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

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

原文地址:https://www.cnblogs.com/hellxz/p/9037597.html

时间: 2024-10-06 07:54:40

【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session的相关文章

懒加载的解决方法(全)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

如下错误:org.hibernate.LazyInitializationException: could not initialize proxy - no Session 原因是懒加载的问题,因为hibernate的机制是当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性的时候,才会向数据库再一次查询,可以这时session已经关闭了,无法对数据库进行查询. 举例:在界面显示雇员所在的部门名称${loginuser.department.name } 解

懒加载异常org.hibernate.LazyInitializationException: could not initialize proxy - no Session

错误页面提示 could not initialize proxy - no Session 控制台 org.hibernate.LazyInitializationException: could not initialize proxy - no Session 病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,然后你使用了,导致该异常. Q

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在<many-to-on>中这错误很常见,字面意义就是不能被初始化,因为session已经关闭了. 简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据.而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了,我们该如何解决这种异常呢? 简单的说有三种:1.把la

hibernate4.x lazy exception org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在stackoverflow 上面找到一篇介绍 使用了 hibernate.enable_lazy_load_no_trans 的处理,配置后解决了错误: <bean id="sessionFactory"         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">         <property name="dataSource"

org.hibernate.LazyInitializationException: could not initialize proxy [com.angus.entity.ProductCateg

错误现象: org.hibernate.LazyInitializationException: could not initialize proxy [com.angus.entity.ProductCategory#1] - no Session 解决方式 在出问题的实体类上加@Proxy(lazy = false) 原因 hibernate默认是懒加载的. 原文地址:https://www.cnblogs.com/bestjdg/p/12105100.html

spring boot(1):JPA org.hibernate.LazyInitializationException: could not initialize proxy [XXX#1] - no Session

把getOne改为findById就可以了 @Override public AliyunDnsSettings findById(long id) { //return aliyunDnsSettingsRepository.getOne(id); // 把getOne改为findById就可以了 return aliyunDnsSettingsRepository.findById(id).get(); } 原文地址:https://www.cnblogs.com/javalittleman

LazyInitializationException: could not initialize proxy no session

这完全是框架设计者的锅,讲道理  无论是SSH SSM都太重了, Hibernate几乎把SQL完全封装了一遍,简单的一对多关系,如果开启LazyLoad 这样实体类会被代理,直到访问这个多方实体的属性的时候,才会加载 在webxml中加入 <filter> <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> <filter-class>org.springframework.orm

微信小程序bug记录与解决

微信小程序bug记录 textarea textarea在模拟器上没有padding,可是在真机上会自带padding,而且在外部改不了,并且在安卓和IOS上padding还不一样 第一张图是在开发工具上的,第二张图是在IOS真机上的.从上图可以看出来,在开发工具上显示很正常,而且没有padding,可是在真机上左上角就出现了padding,并且无论你在外部对textarea的padding做任何处理,都无法覆盖. 目前有一种解决方式是根据ios和android的不同平台来给teaxarea设置

org.hibernate.LazyInitializationException could not initialize proxy-no Session的解决

方法一:在web.xml配置延迟关闭session的过滤器 <!-- 延迟关闭session OpenSessionInViewFilter 的顺序位于struts2过滤之上 否则延迟关闭session不起作用 --> <filter> <filter-name>opensession</filter-name> <filter-class> org.springframework.orm.hibernate4.support.OpenSessi