问题描述
话说问题之前,先把异常堆栈贴出来:19:28:17,671ERRORAssertionFailure:22-anassertionfailureoccured(thismayindicateabuginHibernate,butismorelikelyduetounsafeuseofthesession)org.hibernate.AssertionFailure:collection[com.iwork.basic.model.IOrganization.childOrg]wasnotprocessedbyflush()atorg.hibernate.engine.CollectionEntry.postFlush(CollectionEntry.java:205)atorg.hibernate.event.def.AbstractFlushingEventListener.postFlush(AbstractFlushingEventListener.java:333)atorg.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:28)atorg.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)atorg.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)atorg.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)atorg.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:558)atorg.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:540)atorg.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:510)atorg.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:310)atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)atorg.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)at$Proxy25.updateEntity(UnknownSource)atcom.iwork.basic.action.OrganizationAction.updateOrg(OrganizationAction.java:124)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:597)atcom.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)atcom.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)atcom.util.LoginInterceptor.intercept(LoginInterceptor.java:27)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)atorg.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atcom.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)atorg.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)atorg.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)atorg.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)atjava.lang.Thread.run(Thread.java:619)
这里,介绍一下问题出现的背景:为方便后台管理,我使用了机构(IOrganization)与用户(IUser)的一对多双向关联映射,机构(IOrganization)的自关联映射。之前为了做系统审计日志,考虑到日志粒度问题,我采用了基于Hibernate3的事件框架做系统审计日志,日志配置如下:<propertyname="eventListeners"><map><entrykey="post-update"><refbean="auditLog"/></entry><entrykey="post-delete"><refbean="auditLog"/></entry><entrykey="post-insert"><refbean="auditLog"/></entry></map></property>
当我向机构中增加用户时,问题就出现了,而且问题很蹊跷:当我将审计日志配置注销掉,操作能正常完成;一启用审计日志配置,就报出上述错误。为这个问题纠结了好几天,在程序中断点跟踪,也没找到出错位置,实在是没辙了。真诚求解释,希望技术大牛们不吝赐教!!!
解决方案
解决方案二:
这么久了居然没有兄弟姐妹和我一起讨论这个话题......
解决方案三:
这段时间我在解决这个问题时候已经有所收获。等闲下来和大家分享一下我的新的体会!!
解决方案四:
LZ现在拿出来说说啊?
解决方案五:
暂时查到资料显示可能是hibernate版本的Bug问题一直在找机会总结一下这类问题,可还一直没来得及汗颜呀...
解决方案六:
异常提示也是说是hibernate里出现的问题,找了好多资料但是一直都解决不了、、、
解决方案七:
我在springsourcecommunity论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:TORama:amasterlyidea:-)I'veresolvedthisproblem!butIdidnotfollowyouridea,butthanksforyourreplyIswitchedmyhibernate3.0tohibernate3.2.6justasbdangubicsaidanditworkedwell
这哥们回复的大概意思是说,使用hibernate3.2.6替换了项目中的hibernate3.0,然后这个问题就解决了。可是我把项目中hibernate版本换掉之后,还是会出现这种问题,我现在项目框架采用的是Struts2.1+Spring3.0+hibernate3.1。因为论坛中没有提到项目除了hibernate做持久层,还是用其他什么架构,所以我现在也不敢随意揣摩。如果大家有什么好的解决途径,希望慷慨分享一下哦!!
解决方案八:
引用6楼rogerxp的回复:
我在springsourcecommunity论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:JavacodeTORama:amasterlyidea:-)I'veresolvedthisproblem!butIdidnotfollowyouridea,butthanksforyourreplyIswitche……
你说的那个帖子我也看过了,也试了,我之前的hibernate是3.2.7的,替换之后也不行。我那问题虽然已经解决了,但是是将里面原来的方法分离出来了。我那update方法里面调用了一个方法,那方法也执行了update的操作,但是没有commit。也就是说我那问题相当于是:updateupdate--commit。调用的那方法执行update操作之后没有commit,所以hibernate提示说启用了一个不安全的会话。
解决方案九:
引用7楼的回复:
引用6楼rogerxp的回复:我在springsourcecommunity论坛里看到这个相关问题讨论和解决途径,不过都是英文的,给大家摘录一段:JavacodeTORama:amasterlyidea:-)I'veresolvedthisproblem!butIdidnotfollowyouridea,butthanksf……
使用commit的前提是事务是自己管理的可是我的系统中事务都交给了Spring来管理的所以不会涉及到事务问题导致的不安全会话
解决方案十:
问题原因终于找到了,不过不知道你们的问题是不是这个原因。原因就是在Hibernate3的事件处理过程中对原始数据进行了访问或处理,导致update与save产生冲突,如果原始数据不是对象而是Integer、String等常规数据类型是没有关系,一旦你调用了many-to-one或者one-to-many之类的就会抛这个异常出来。所以我最后做日志的时候把many-to-one或者one-to-many的属性去掉不记录就没问题了!
解决方案十一:
汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!!
解决方案十二:
汗颜呀,同志们,现在才回来探讨这个问题。我最后采取曲线救国了。由于系统后台要求关联业务操作的细粒度审计日志,而基于Hibernate事件驱动的切面操作无法达到我们审计日志的要求,最后采取了硬编码这种最蠢最笨的方式做审计日志。我现在倒是想重开一帖,和大家讨论一下做后台审计日志的通用做法,既要考虑到系统业务问题,让普通用户(非IT从业人员)也能看懂系统审计日志;也要考虑到审计日志的粒度问题,粒度可以越小越好,可以有记录操作时间,操作数据以及数据的前后变化;操作人信息。最好是审计日志的使用和记录的信息达到可配置状态。就在这和大家讨论这个问题了,愿意讨论者人人有分,虽然分不怎么多,只想和大家共同进步!!
解决方案十三:
美女,现在还可以讨论下这个问题吗。到底是怎么解决的呢。
解决方案十四:
我也这样,解决不了
解决方案十五:
奶奶的个熊的,这个问题找了一天终于给解决了,你说容易吗,这种错是由于hibernate缓存机制引起的,当你查询对像出来的时候,可它的子对象没有立即存在,解决方案有两种哟,一种是你system.out.println(com.iwork.basic.model.IOrganization.childOrg.size())或者你直接输出它然后再存储,当然还有一种就是
解决方案:
还一种就是Hibernate.
解决方案:
我也遇到这样的问题。但是没影响功能,不知道怎么解决,我的也是one—to—many。感觉和这个是有点关系
解决方案:
这个问题你最后怎么解决的?????我也遇到一个类似的问题,我的仓库表和备货表是一对多的关系,我的数据库里如果备货去的数据是空的的话,就可以查询出仓库的类容,如果我给备货区表添加数据后就查不出来了,,,还报错!!!!!!!!Theserverencounteredaninternalerror()thatpreventeditfromfulfillingthisrequest.(这是网页上显示的错误信息)[org.hibernate.engine.loading.LoadContexts-132][http-8080-3][358229]-fail-safecleanup(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]-OnCollectionLoadContext#cleanup,localLoadingCollectionKeyscontained[1]entries这是eclipse上显示的错误
解决方案:
解决方案:
你可一检查一下你的空构造方法,如果没有空构造方法,或者空构造方法出错都会报这样的错误!!!!