lazyinitializationexception在引入@controller注解后发生

ddhy6vgd  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(321)

我们在spring中使用方法名解析器实现了一个分布式web应用程序。我们现在正在从方法名称解析器迁移到spring注解(@controller)。一旦我们做了更改,我们面临的最大问题就是所有的延迟初始化都无法工作。我们开始出现以下错误:

2020-11-10 13:12:53,678 DEBUG     o.s.web.servlet.DispatcherServlet:1182 Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'XXXXXXXX'; model is {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) ~[hibernate-core-4.2.17.Final.jar:4.2.17.Final]
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286) ~[hibernate-core-4.2.17.Final.jar:4.2.17.Final]
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.2.17.Final.jar:4.2.17.Final]

通过分析,我们可以发现,使用名为resolver的方法,系统能够延迟初始化对象。在@controller注解中,系统抛出lazyinitializationerror,因为会话对象正在关闭,无法延迟初始化。
有什么办法可以解决这个问题?如何通过@controller维护会话,类似于方法名解析器。
任何见解都将得到高度评价。谢谢。

ppcbkaq5

ppcbkaq51#

听起来你的控制器方法是异步的。如果是这样的话,就不会有会话,因为调用是在不同的线程中完成的,并且会话不会随它一起出现。这个类似的问题解释了这一点,并给出了解决方案。检查控制器方法是否有@async注解或类似的内容。如果是这样的话,它肯定会抛出这个错误。

aiazj4mn

aiazj4mn2#

听起来像是在使用“视图中打开会话”(反)模式。看Spring的 OpenSessionInViewFilter .

相关问题