使用gorm findAllBy的间歇性HibernateSystemException

时间:2015-09-24 16:30:32

标签: hibernate grails gorm hibernate-4.x

此错误的原因是什么?

  

... 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问题。

0 个答案:

没有答案