此错误的原因是什么?
... hibernate4.HibernateSystemException:集合与任何会话无关
我们在Grails应用服务器上间歇性地遇到此错误。我们使用相同的输入向服务器运行相同的请求10次(这是一个只读请求),并且可能有10个请求产生此错误。
生成错误的客户端代码如下所示:
def list = ParentData.findAllByGroupPartyIdAndCaseStatusIlike(groupPartyId, caseStatus)
这是此请求中发生的第一个数据库调用。服务方法标记为@Transactional(readOnly = true)
。
我们一开始认为这是一个与我们的GORM映射声明有关的数据特定问题,但似乎即使没有指定groupPartyId和caseStatus的记录,我们仍然会遇到此错误。< / p>
我们无法在调试器中单步执行框架代码,因为我们无法在开发服务器上重现该问题。
任何提示都将不胜感激。
堆栈追踪:
org.springframework.orm.hibernate4.HibernateSystemException: collection is not associated with any session;
nested exception is
org.hibernate.HibernateException: collection is not associated with any session
at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:101)
at com.mycompany.myapp.MyService.$tt__getUpdate(MyService.groovy:...)
at com.mycompany.myapp.MyController.getUpdate(MyController.groovy:...)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.HibernateException: collection is not associated with any session
P.S。该应用程序使用hibernate 4插件运行Grails 2.3.11。
更新
我们发现重新启动应用程序似乎已经解决了问题,但我们仍然对根本原因感到困惑。我们的工作理论是它是某种缓存或DBCP问题。