我们在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维护会话,类似于方法名解析器。
任何见解都将得到高度评价。谢谢。
2条答案
按热度按时间ppcbkaq51#
听起来你的控制器方法是异步的。如果是这样的话,就不会有会话,因为调用是在不同的线程中完成的,并且会话不会随它一起出现。这个类似的问题解释了这一点,并给出了解决方案。检查控制器方法是否有@async注解或类似的内容。如果是这样的话,它肯定会抛出这个错误。
aiazj4mn2#
听起来像是在使用“视图中打开会话”(反)模式。看Spring的
OpenSessionInViewFilter
.