当前位置:编程学习 > JAVA >>

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

话说问题之前,先把异常堆栈贴出来:
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>

    当我向机构中增加用户时,问题就出现了,而且问题很蹊跷:当我将审计日志配置注销掉,操作能正常完成;一启用审计日志配置,就报出上述错误。
    为这个问题纠结了好几天,在程序中断点跟踪,也没找到出错位置,实在是没辙了。真诚求解释,希望技术大牛们不吝赐教!!! --------------------编程问答-------------------- 这么久了  居然没有兄弟姐妹和我一起讨论这个话题...... --------------------编程问答-------------------- 这段时间 我在解决这个问题时候已经有所收获。等闲下来 和大家分享一下我的新的体会!!  --------------------编程问答-------------------- LZ  现在拿出来说说啊? --------------------编程问答-------------------- 暂时查到资料显示可能是hibernate版本的Bug问题  一直在找机会总结一下这类问题,可还一直没来得及  汗颜呀... --------------------编程问答-------------------- 异常提示也是说是hibernate里出现的问题,找了好多资料但是一直都解决不了、、、 --------------------编程问答-------------------- 我在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做持久层,还是用其他什么架构,所以我现在也不敢随意揣摩。
如果大家有什么好的解决途径,希望慷慨分享一下哦!! --------------------编程问答--------------------
引用 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……
你说的那个帖子我也看过了,也试了,我之前的hibernate是3.2.7的,替换之后也不行。我那问题虽然已经解决了,但是是将里面原来的方法分离出来了。我那update方法里面调用了一个方法,那方法也执行了update的操作,但是没有commit。也就是说我那问题相当于是:update   update   --   commit。调用的那方法执行update操作之后没有commit,所以hibernate提示说启用了一个不安全的会话。 --------------------编程问答--------------------
引用 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……
使用commit的前提是事务是自己管理的  可是我的系统中事务都交给了Spring来管理的 所以不会涉及到事务问题导致的不安全会话 --------------------编程问答-------------------- 问题原因终于找到了,不过不知道你们的问题是不是这个原因。
原因就是在Hibernate3的事件处理过程中对原始数据进行了访问或处理,导致update与save产生冲突,如果原始数据不是对象而是Integer、String等常规数据类型是没有关系,一旦你调用了many-to-one或者one-to-many之类的就会抛这个异常出来。
所以我最后做日志的时候把many-to-one或者one-to-many的属性去掉不记录就没问题了! --------------------编程问答-------------------- 汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!! --------------------编程问答-------------------- 汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!! --------------------编程问答-------------------- 美女,现在还可以讨论下这个问题吗。到底是怎么解决的呢。 --------------------编程问答-------------------- 我也这样,解决不了
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,