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
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:无法初始化代理 - 无会话”,您也可以在此处发布错误和代码,我们可以一起看看。
jpa:
properties:
hibernate:
enable_lazy_load_no_trans: true