SSH系统异常hibernate.AssertionFailure: collection[] was not processed by flush()

小肖2015 2012-02-28 10:45:37
话说问题之前,先把异常堆栈贴出来:
19:28:17,671 ERROR AssertionFailure:22 - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: collection [com.iwork.basic.model.IOrganization.childOrg] was not processed by flush()
at org.hibernate.engine.CollectionEntry.postFlush(CollectionEntry.java:205)
at org.hibernate.event.def.AbstractFlushingEventListener.postFlush(AbstractFlushingEventListener.java:333)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:28)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:558)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:540)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:510)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:310)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy25.updateEntity(Unknown Source)
at com.iwork.basic.action.OrganizationAction.updateOrg(OrganizationAction.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
at com.util.LoginInterceptor.intercept(LoginInterceptor.java:27)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)

这里,介绍一下问题出现的背景:
为方便后台管理,我使用了机构(IOrganization)与用户(IUser)的一对多双向关联映射,机构(IOrganization)的自关联映射。之前为了做系统审计日志,考虑到日志粒度问题,我采用了基于Hibernate3的事件框架做系统审计日志,日志配置如下:
<property name="eventListeners">
<map>
<entry key="post-update">
<ref bean="auditLog" />
</entry>
<entry key="post-delete">
<ref bean="auditLog" />
</entry>
<entry key="post-insert">
<ref bean="auditLog" />
</entry>
</map>
</property>

当我向机构中增加用户时,问题就出现了,而且问题很蹊跷:当我将审计日志配置注销掉,操作能正常完成;一启用审计日志配置,就报出上述错误。
为这个问题纠结了好几天,在程序中断点跟踪,也没找到出错位置,实在是没辙了。真诚求解释,希望技术大牛们不吝赐教!!!
...全文
796 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕枫520 2014-09-10
  • 打赏
  • 举报
回复
你可一检查一下你的空构造方法,如果没有空构造方法,或者空构造方法出错都会报这样的错误!!!!
慕枫520 2014-09-05
  • 打赏
  • 举报
回复
这个问题你最后怎么解决的?????我也遇到一个类似的问题,我的仓库表和备货表是一对多的关系,我的数据库里如果备货去的数据是空的的话,就可以查询出仓库的类容,如果我给备货区表添加数据后就查不出来了,,,还报错!!!!!!!!The server encountered an internal error () that prevented it from fulfilling this request.(这是网页上显示的错误信息)[org.hibernate.engine.loading.LoadContexts-132][http-8080-3][358229] - fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@3f2507<rs=oracle.jdbc.driver.OracleResultSetImpl@979ede> 09-0513:16:35[org.hibernate.engine.loading.CollectionLoadContext-348][http-8080-3][358230] - On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries 这是eclipse上显示的错误
pengjialide 2014-03-19
  • 打赏
  • 举报
回复
我也遇到这样的问题。但是没影响功能,不知道怎么解决,我的也是one—to—many。感觉和这个是有点关系
LoPen163 2014-02-23
  • 打赏
  • 举报
回复
还一种就是Hibernate.
LoPen163 2014-02-23
  • 打赏
  • 举报
回复
奶奶的个熊的,这个问题找了一天终于给解决了,你说容易吗,这种错是由于hibernate缓存机制引起的,当你查询对像出来的时候,可它的子对象没有立即存在,解决方案有两种哟,一种是你 system.out.println(com.iwork.basic.model.IOrganization.childOrg.size()) 或者你直接输出它然后再存储,当然还有一种就是
bnmt2013 2013-07-08
  • 打赏
  • 举报
回复
我也这样,解决不了
chenhbc 2013-07-08
  • 打赏
  • 举报
回复
美女,现在还可以讨论下这个问题吗。到底是怎么解决的呢。
小肖2015 2012-07-14
  • 打赏
  • 举报
回复
汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!!
小肖2015 2012-07-14
  • 打赏
  • 举报
回复
汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!!
mygod0218 2012-05-18
  • 打赏
  • 举报
回复
问题原因终于找到了,不过不知道你们的问题是不是这个原因。
原因就是在Hibernate3的事件处理过程中对原始数据进行了访问或处理,导致update与save产生冲突,如果原始数据不是对象而是Integer、String等常规数据类型是没有关系,一旦你调用了many-to-one或者one-to-many之类的就会抛这个异常出来。
所以我最后做日志的时候把many-to-one或者one-to-many的属性去掉不记录就没问题了!
小肖2015 2012-03-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 rogerxp 的回复:

我在springsource community论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:
Java code
TO Rama: a masterly idea :-)

I've resolved this problem!
but I did not follow your idea, but thanks f……
[/Quote]使用commit的前提是事务是自己管理的 可是我的系统中事务都交给了Spring来管理的 所以不会涉及到事务问题导致的不安全会话
liguoxing81 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rogerxp 的回复:]

我在springsource community论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:
Java code
TO Rama: a masterly idea :-)

I've resolved this problem!
but I did not follow your idea, but thanks for your reply
I switche……
[/Quote]你说的那个帖子我也看过了,也试了,我之前的hibernate是3.2.7的,替换之后也不行。我那问题虽然已经解决了,但是是将里面原来的方法分离出来了。我那update方法里面调用了一个方法,那方法也执行了update的操作,但是没有commit。也就是说我那问题相当于是:update update -- commit。调用的那方法执行update操作之后没有commit,所以hibernate提示说启用了一个不安全的会话。
小肖2015 2012-03-24
  • 打赏
  • 举报
回复
我在springsource community论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:
TO Rama: a masterly idea :-) 

I've resolved this problem!
but I did not follow your idea, but thanks for your reply
I switched my hibernate3.0 to hibernate 3.2.6 just as bdangubic said and it worked well

这哥们回复的大概意思是说,使用hibernate3.2.6替换了项目中的hibernate3.0,然后这个问题就解决了。可是我把项目中hibernate版本换掉之后,还是会出现这种问题,我现在项目框架采用的是Struts2.1+Spring3.0+hibernate3.1。因为论坛中没有提到项目除了hibernate做持久层,还是用其他什么架构,所以我现在也不敢随意揣摩。
如果大家有什么好的解决途径,希望慷慨分享一下哦!!
liguoxing81 2012-03-21
  • 打赏
  • 举报
回复
异常提示也是说是hibernate里出现的问题,找了好多资料但是一直都解决不了、、、
小肖2015 2012-03-19
  • 打赏
  • 举报
回复
暂时查到资料显示可能是hibernate版本的Bug问题 一直在找机会总结一下这类问题,可还一直没来得及 汗颜呀...
liguoxing81 2012-03-15
  • 打赏
  • 举报
回复
LZ 现在拿出来说说啊?
小肖2015 2012-03-11
  • 打赏
  • 举报
回复
这段时间 我在解决这个问题时候已经有所收获。等闲下来 和大家分享一下我的新的体会!!
小肖2015 2012-03-11
  • 打赏
  • 举报
回复
这么久了 居然没有兄弟姐妹和我一起讨论这个话题......

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧