无法懒惰地初始化一个集合,没有会话或会话被关闭(尽管急切地提取) [英] Failed to lazily initialize a collection, no session or session was closed (despite eagerly fetching)

查看:116
本文介绍了无法懒惰地初始化一个集合,没有会话或会话被关闭(尽管急切地提取)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,我正在处理一个应用程序中出现上述异常。我正在使用JPA和休眠。这里是堆栈跟踪:

 警告:#{commissionController.saveCommission}:javax.persistence.PersistenceException:org.hibernate.LazyInitializationException:未能懒惰地初始化一个集合,没有会话或会话被关闭
javax.faces.FacesException:#{commissionController.saveCommission}:javax.persistence.PersistenceException:org.hibernate.LazyInitializationException:无法懒惰地初始化集合,没有会话或会话已关闭
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at org.apache.myfaces.extensions.cdi.jsf.impl.security.SecurityViolationAwareActionListener .processAction(SecurityViolationAwareActionListener.java:56)
at org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:68)
at org.apache .myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processActi (CodiActionListener.java:58)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com .sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
在org.apache.myfaces .extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina .core.StandardWrapperValve.invok E(StandardWrapperValve.java:222)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase。
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache .coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)
at java.uti l.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)$ b $在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)
在java.lang.Thread.run( Thread.java:722)
导致:javax.faces.el.E​​valuationException:javax.persistence.PersistenceException:org.hibernate.LazyInitializationException:无法延迟初始化集合,没有会话或会话已关闭
在javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 27 more
导致:javax.persistence.PersistenceException:org.hibernate.LazyInitializationException:无法懒惰地初始化集合,没有会话或会话被关闭
在org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java: 1377)在org.hibernate.ejb.AbstractEntityManagerImpl处
.convert(AbstractEntityManagerImpl.java:1300)
在org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)在org.hibernate.ejb.AbstractEntityManagerImpl.merge
(AbstractEntityManagerImpl.java:888 )
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:45 )
在org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105)
在org.jboss.weld.proxies.EntityManager $ 1148094400 $ Proxy $ _ $$ _ WeldClientProxy.merge (EntityManager的$十一亿四千八百〇九万四千四$代理$ _ $$ _ WeldClientProxy.java)
在se.raindance.persistence.RaindanceBaseHomeImpl.update(RaindanceBaseHomeImpl.java:57)
at se.raindance.purchasecommission.home.CommissionHome.update(CommissionHome.java:59)
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _ WeldSubclass.update(CommissionHome $ Proxy $ _ $$ _ WeldSubclass.java)
at se.raindance.persistence.RaindanceBaseHomeImpl.persist(RaindanceBaseHomeImpl.java:67)
at se.raindance.purchasecommission.home.CommissionHome.persist(CommissionHome.java: 43)
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _ WeldSubclass.persist(CommissionHome $ Proxy $ _ $$ _ WeldSubclass.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
处的java.lang sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
。 reflect.Method.invoke(Method.java:601)
at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionCha in.java:85)
处org.apache.myfaces.extensions.cdi.jpa.impl org.jboss.weld.interceptor.proxy.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:127)
。 transaction.TransactionalInterceptorStrategy.execute(TransactionalInterceptorStrategy.java:125)
处太阳org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptor.executeInTransaction(TransactionalInterceptor.java:54)
。 reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:601)
在org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
at org。 jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
at org.j boss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:112)
在org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
。在组织。 jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:55)
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _ WeldSubclass.persist(CommissionHome $ Proxy $ _ $$ _ WeldSubclass .java)
at se.raindance.purchasecommission.controller.CommissionController.saveCommission(CommissionController.java:139)
at se.raindance.purchasecommission.controller.CommissionController $ Proxy $ _ $$ _ WeldClientProxy.saveCommission( CommissionController $ Proxy $ _ $$ _ WeldClientProxy.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.Delegating MethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.el.parser.AstValue.invoke(AstValue。
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 28 more
引起:org.hibernate.LazyInitializationException:无法懒惰地初始化集合,没有会话或会话已关闭
org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:489)
在org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:447)
在org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:139)
在org.hibernate作为.collection.internal.PersistentBag.isEmpty(PersistentBag.java:249)
at se.raindance.purchasecommission.domain.Form.removeHiddenFields(Form.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang中.reflect.Method.invoke(Method.java:601)
at org.hibernate.ejb.event.BeanCallback.invoke(BeanCallback.java:39)
at org.hibernate.ejb.event.EntityCallbackHandler .callback(EntityCallbackHandler.java:110)
在org.hibernate.ejb.event.EntityCa llbackHandler.postLoad(EntityCallbackHandler.java:103)
在org.hibernate.ejb.event.EJB3PostLoadEventListener.onPostLoad(EJB3PostLoadEventListener.java:49)
在org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity( TwoPhaseLoad.java:292)
在org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
在org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
在org.hibernate.loader.Loader.doQuery(Loader.java:878)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
在org.hibernate .loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
在org.hibernate.loader.Loader.loadEntity(Loader.java:1977)
在org.hibernate.loader.entity.AbstractEntityLoader.load (AbstractEntityLoader.java:82)
在org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
在org.hibernate.persister.e ntity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)
处org.hibernate.event.internal.DefaultLoadEventListener org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
。 doLoad(DefaultLoadEventListener.java:427)
在org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
在org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener。
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
在org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
在org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613)
在org.hibernate.type .EntityType.resolve(EntityType.java:441)
在org.hibernate.type.EntityType.replace(EntityType。 Java的:在org.hibernate.type.AbstractType.replace(AbstractType.java:178 298)

在org.hibernate.type.TypeHelper.replace(TypeHelper.java:211)
在org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:409)
在org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:214)
在org.hibernate作为.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
在org.hibernate.internal.SessionImpl .fireMerge(SessionImpl.java:904)
在org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
在org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892 )
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
... 71 more

feb 20,2013 11:27:26 FM org 。 apache.deltaspike.core.api.provider.BeanProvider logWarningIfDependent
警告:BeanProvider不应该被用来创建@Dependent范围的bean。 Bean:Managed Bean [class se.raindance.webutil.cdi.common.HandlesGeneric] with qualifiers [@Any @Default]
feb 20,2013 11:27:26 FM org.apache.deltaspike.core.api。 provider.BeanProvider logWarningIfDependent
警告:BeanProvider不能用于创建@Dependent范围的bean。 Bean:Managed Bean [class se.raindance.webutil.cdi.common.HandlesPersistence] with qualifiers [@Any @Default]
2013-02-20 11:27:26,808 [http-bio-8080-exec-8 ] INFO org.hibernate.event.internal.DefaultLoadEventListener - HHH000327:执行加载命令时出错:org.hibernate.LazyInitializationException:未能懒惰地初始化集合,没有会话或会话已关闭
2013-02-20 11:27 :26,811 [http-bio-8080-exec-8] WARN org.hibernate.engine.loading.internal.LoadContexts - HHH000100:故障安全清除(集合):org.hibernate.engine.loading.internal.CollectionLoadContext@4b2f3792< rs=org.hibernate.engine.jdbc.internal.proxy.ResultSetProxyHandler@3308315a [有效=假] GT;
2013-02-20 11:27:26,812 [http-bio-8080-exec-8] WARN org.hibernate.engine.loading.internal.CollectionLoadContext - HHH000160:On CollectionLoadContext#cleanup,localLoadingCollectionKeys contains [1]条目
2013-02-20 11:27:26,822 [http-bio-8080-exec-8]错误se.raindance.webutil.cdi.common.HandlesGeneric - 打印堆栈跟踪:-91600366
org。 hibernate.LazyInitializationException:无法初始化懒洋洋的集合,没有会议或会议于org.hibernate.collection在org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:489)收

.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:447)
at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:139)
at org.hibernate.collection.internal.PersistentBag .isEmpty(PersistentBag.java:249)
at se.raindance.purchasecommission.domain.Form.removeHiddenFields(Form.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
在org.hibernate.ejb.event.BeanCallback.invoke(BeanCallback.java:39)
at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:110)
at org.hibernate .ejb.event.EntityCallbackHandler.postLoad(EntityCallbackHandler.java:103)
在org.hibernate.ejb.event.EJB3PostLoadEventListener.onPostLoad(EJB3PostLoadEventListener.java:49)
在org.hibernate.engine.internal .TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:292)$ or $ $ b $ org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
at org .hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
在org.hibernate.loader.Loader.doQuery(Loader.java:878)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:293)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1977)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)
处org.hibernate作为org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
。 event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
at org.hibernate.event.internal.DefaultLoadEventListener.load(D (默认情况下,事件监听器.java:204)
在org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:在org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079 148)

在org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
。在组织.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613)
位于org.hibernate.type.EntityType.resolve(EntityType.java:441)
位于org.hibernate.type.EntityType.replace (EntityType.java:298)在org.hibernate.type.AbstractType.replace(AbstractType.java:178)

在org.hibernate.type.TypeHelper.replace(TypeHelper.java:211)
at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:409)
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEve ntListener.java:214)在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154

在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java: 76)$在org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:904 b $ b)
。在org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
。在有机.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57

在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect中.Method.invoke(Method.java:601)
at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:45)
at or g.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105)
在org.jboss.weld.proxies.EntityManager $一一四八〇九四四〇〇$代理$ _ $$ _ WeldClientProxy.merge(EntityManager的$一一四八〇九四四〇〇$代理$ _ $$ _ WeldClientProxy.java)
at se.raindance.persistence.RaindanceBaseHomeImpl.update(RaindanceBaseHomeImpl.java:57)
at se.raindance.purchasecommission.home.CommissionHome.update(CommissionHome.java:59 )
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _ WeldSubclass.update(CommissionHome $ Proxy $ _ $$ _ WeldSubclass.java)
at se.raindance.persistence.RaindanceBaseHomeImpl.persist (RaindanceBaseHomeImpl.java:67)
at se.raindance.purchasecommission.home.CommissionHome.persist(CommissionHome.java:43)
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _WeldSubclass.persist(CommissionHome $ Proxy $ _ $$ _ WeldSubclass.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
at sun.reflect.NativeMethodA ccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:601)在org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:85)

在org.jboss.weld.interceptor.proxy.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:127)
位于org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptorStrategy.execute(TransactionalInterceptorStrategy.java:125)
位于org.apache.myfaces.extensions.cdi.jpa.impl。 transaction.TransactionalInterceptor.executeInTransaction(TransactionalInterceptor.java:54)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso (java.lang.reflect.Method.invoke(Method.java:601)
org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java: 30)
。在org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
。在org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:
at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java: 55)
at se.raindance.purchasecommission.home.CommissionHome $ Proxy $ _ $$ _ WeldSubclass.persist(CommissionHome $ Proxy $ _ $$ _ WeldSubclass.java)
at se.raindance.purchasecommission.controller。 CommissionController.saveCommission(CommissionController.java:139)
at se.raindance.purchasecommissio n.controller.CommissionController $ Proxy $ _ $$ _ WeldClientProxy.saveCommission(CommissionController $ Proxy $ _ $$ _ WeldClientProxy.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)$ b $ sun at sun.reflect .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:601 )
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com。 sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAda pter.java:88)
处org.apache.myfaces.extensions.cdi.jsf.impl.security com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
。 SecurityViolationAwareActionListener.processAction(SecurityViolationAwareActionListener.java:56)
at org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:68)
at org。 apache.myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processAction(CodiActionListener.java:58)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces。 lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.Li fecycleImpl.execute(LifecycleImpl.java:118)
at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95)
在javax。 faces.webapp.FacesServlet.service(FacesServlet.java:593)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core。 ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
在org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLo)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLo
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)
在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)$ b $在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
在java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:603)
。在java.lang.Thread.run(Thread.java:722)

调试时,我发现它似乎来自Form实体中的一部分代码:

  @PostLoad 
public void removeHiddenFields(){
if(fields.isEmpty()){
return; // don采取任何动作,如果没有领域
}
的for(int i = 0;我< fields.size(); i)){
if(fields.get(i).isHidden()){
fields.remove(fields.get(i));
}
}
}

fields.isEmpty ()向上抛出异常。

从我读过的内容来看,这应该可以通过设置一个可以解决的集合来获取。我认为问题是字段集合。但是...
$ b $ pre $ code @JoinColumn(name =FORM)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List< Field> fields = new ArrayList< Field>();

它已经在急切地获取。必须这样做才能解决开发过程中遇到的另一个问题。



可能是什么问题?



新增:

表单实体是这样加载的:

有一个类可以处理Form实体的数据库查询。有两种从DB获取它们的方法(取决于哪种类型的表单)。

  public List< Form> getAllActiveForms(){
TypedQuery< Form> query = this.getEntityManager()。createNamedQuery(
getAllActiveForms,Form.class);
返回query.getResultList();
}

公共列表< Form> getAllInactiveForms(){
TypedQuery< Form> query = this.getEntityManager()。createNamedQuery(
getAllInactiveForms,Form.class);
返回query.getResultList();
}

命名查询在Form实体上定义为:

  @NamedQueries({
@NamedQuery(name =getAllActiveForms,query =SELECT f FROM Form f WHERE f.isEnabled = true),
@NamedQuery(name =getAllInactiveForms,query =SELECT f FROM Form f WHERE f.isEnabled = false)})

函数中使用的currentForm是从其中一个列表中选取的。

现在我还注意到,应用程序中的另一个函数只是简单地更新一个Form,现在抛出了相同类型的异常。这次它来自merge() - 函数:

  @Transactional 
public Form updateAndReturn(){
getInstance()。setTimestamp(System.currentTimeMillis());
表单f = getEntityManager()。merge(getInstance());
getEntityManager()。flush();
返回f;
}


解决方案

在休眠。在这里找到它: http://issues.jboss.org/browse/JBAS-5474

它从版本4.1.8开始工作( https://hibernate.onjira.com/browse/HHH -6043



问题出在@PostLoad,显然不能做按照正确的顺序。


Okay, I get the above exception in an application I'm working on. I am using JPA and hibernate. Here is the stacktrace:

WARNING: #{commissionController.saveCommission}: javax.persistence.PersistenceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
javax.faces.FacesException: #{commissionController.saveCommission}: javax.persistence.PersistenceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at org.apache.myfaces.extensions.cdi.jsf.impl.security.SecurityViolationAwareActionListener.processAction(SecurityViolationAwareActionListener.java:56)
    at org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:68)
    at org.apache.myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processAction(CodiActionListener.java:58)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 27 more
Caused by: javax.persistence.PersistenceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:888)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:45)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105)
    at org.jboss.weld.proxies.EntityManager$1148094400$Proxy$_$$_WeldClientProxy.merge(EntityManager$1148094400$Proxy$_$$_WeldClientProxy.java)
    at se.raindance.persistence.RaindanceBaseHomeImpl.update(RaindanceBaseHomeImpl.java:57)
    at se.raindance.purchasecommission.home.CommissionHome.update(CommissionHome.java:59)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.update(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at se.raindance.persistence.RaindanceBaseHomeImpl.persist(RaindanceBaseHomeImpl.java:67)
    at se.raindance.purchasecommission.home.CommissionHome.persist(CommissionHome.java:43)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.persist(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:85)
    at org.jboss.weld.interceptor.proxy.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:127)
    at org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptorStrategy.execute(TransactionalInterceptorStrategy.java:125)
    at org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptor.executeInTransaction(TransactionalInterceptor.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
    at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:112)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:55)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.persist(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at se.raindance.purchasecommission.controller.CommissionController.saveCommission(CommissionController.java:139)
    at se.raindance.purchasecommission.controller.CommissionController$Proxy$_$$_WeldClientProxy.saveCommission(CommissionController$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    ... 28 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:489)
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:447)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:139)
    at org.hibernate.collection.internal.PersistentBag.isEmpty(PersistentBag.java:249)
    at se.raindance.purchasecommission.domain.Form.removeHiddenFields(Form.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.hibernate.ejb.event.BeanCallback.invoke(BeanCallback.java:39)
    at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:110)
    at org.hibernate.ejb.event.EntityCallbackHandler.postLoad(EntityCallbackHandler.java:103)
    at org.hibernate.ejb.event.EJB3PostLoadEventListener.onPostLoad(EJB3PostLoadEventListener.java:49)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:292)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
    at org.hibernate.loader.Loader.doQuery(Loader.java:878)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1977)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613)
    at org.hibernate.type.EntityType.resolve(EntityType.java:441)
    at org.hibernate.type.EntityType.replace(EntityType.java:298)
    at org.hibernate.type.AbstractType.replace(AbstractType.java:178)
    at org.hibernate.type.TypeHelper.replace(TypeHelper.java:211)
    at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:409)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:214)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:904)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
    ... 71 more

feb 20, 2013 11:27:26 FM org.apache.deltaspike.core.api.provider.BeanProvider logWarningIfDependent
WARNING: BeanProvider shall not be used to create @Dependent scoped beans. Bean: Managed Bean [class se.raindance.webutil.cdi.common.HandlesGeneric] with qualifiers [@Any @Default]
feb 20, 2013 11:27:26 FM org.apache.deltaspike.core.api.provider.BeanProvider logWarningIfDependent
WARNING: BeanProvider shall not be used to create @Dependent scoped beans. Bean: Managed Bean [class se.raindance.webutil.cdi.common.HandlesPersistence] with qualifiers [@Any @Default]
2013-02-20 11:27:26,808 [http-bio-8080-exec-8] INFO  org.hibernate.event.internal.DefaultLoadEventListener - HHH000327: Error performing load command : org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
2013-02-20 11:27:26,811 [http-bio-8080-exec-8] WARN  org.hibernate.engine.loading.internal.LoadContexts - HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@4b2f3792<rs=org.hibernate.engine.jdbc.internal.proxy.ResultSetProxyHandler@3308315a[valid=false]>
2013-02-20 11:27:26,812 [http-bio-8080-exec-8] WARN  org.hibernate.engine.loading.internal.CollectionLoadContext - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries
2013-02-20 11:27:26,822 [http-bio-8080-exec-8] ERROR se.raindance.webutil.cdi.common.HandlesGeneric - Printing stacktrace: -91600366
org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:489)
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:447)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:139)
    at org.hibernate.collection.internal.PersistentBag.isEmpty(PersistentBag.java:249)
    at se.raindance.purchasecommission.domain.Form.removeHiddenFields(Form.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.hibernate.ejb.event.BeanCallback.invoke(BeanCallback.java:39)
    at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:110)
    at org.hibernate.ejb.event.EntityCallbackHandler.postLoad(EntityCallbackHandler.java:103)
    at org.hibernate.ejb.event.EJB3PostLoadEventListener.onPostLoad(EJB3PostLoadEventListener.java:49)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:292)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:999)
    at org.hibernate.loader.Loader.doQuery(Loader.java:878)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:293)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:263)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1977)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3821)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613)
    at org.hibernate.type.EntityType.resolve(EntityType.java:441)
    at org.hibernate.type.EntityType.replace(EntityType.java:298)
    at org.hibernate.type.AbstractType.replace(AbstractType.java:178)
    at org.hibernate.type.TypeHelper.replace(TypeHelper.java:211)
    at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:409)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:214)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:904)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:45)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105)
    at org.jboss.weld.proxies.EntityManager$1148094400$Proxy$_$$_WeldClientProxy.merge(EntityManager$1148094400$Proxy$_$$_WeldClientProxy.java)
    at se.raindance.persistence.RaindanceBaseHomeImpl.update(RaindanceBaseHomeImpl.java:57)
    at se.raindance.purchasecommission.home.CommissionHome.update(CommissionHome.java:59)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.update(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at se.raindance.persistence.RaindanceBaseHomeImpl.persist(RaindanceBaseHomeImpl.java:67)
    at se.raindance.purchasecommission.home.CommissionHome.persist(CommissionHome.java:43)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.persist(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:85)
    at org.jboss.weld.interceptor.proxy.InterceptorInvocationContext.proceed(InterceptorInvocationContext.java:127)
    at org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptorStrategy.execute(TransactionalInterceptorStrategy.java:125)
    at org.apache.myfaces.extensions.cdi.jpa.impl.transaction.TransactionalInterceptor.executeInTransaction(TransactionalInterceptor.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
    at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:112)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:55)
    at se.raindance.purchasecommission.home.CommissionHome$Proxy$_$$_WeldSubclass.persist(CommissionHome$Proxy$_$$_WeldSubclass.java)
    at se.raindance.purchasecommission.controller.CommissionController.saveCommission(CommissionController.java:139)
    at se.raindance.purchasecommission.controller.CommissionController$Proxy$_$$_WeldClientProxy.saveCommission(CommissionController$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at org.apache.myfaces.extensions.cdi.jsf.impl.security.SecurityViolationAwareActionListener.processAction(SecurityViolationAwareActionListener.java:56)
    at org.apache.myfaces.extensions.cdi.jsf.impl.config.view.ViewControllerActionListener.processAction(ViewControllerActionListener.java:68)
    at org.apache.myfaces.extensions.cdi.jsf.impl.listener.action.CodiActionListener.processAction(CodiActionListener.java:58)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

When debugging, I noticed that it seems to come from a part of the code in the Form entity:

@PostLoad
public void removeHiddenFields() {
    if(fields.isEmpty()) {
        return;//don't do anything if there are no fields
    }
    for(int i = 0; i < fields.size(); i++) {
        if(fields.get(i).isHidden()) {
            fields.remove(fields.get(i));
        }
    }
}

The part "fields.isEmpty()" throws the exception upwards.

From what I've read, this is supposed to be fixable by setting a collection to be fetched eagerly. I assume that the problem is the fields collection. But ...

@JoinColumn(name = "FORM")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Field> fields = new ArrayList<Field>();

It is already fetching eagerly. Had to do that to solve another problem encountered earlier in the development.

What could be the problem?

Added:

The Form entities are loaded as such:

There is a class that handles the database queries for the Form entity. There are two methods for getting them from the DB (depending on which type of form).

public List<Form> getAllActiveForms() {
    TypedQuery<Form> query = this.getEntityManager().createNamedQuery(
            "getAllActiveForms", Form.class);
    return query.getResultList();
}

public List<Form> getAllInactiveForms() {
    TypedQuery<Form> query = this.getEntityManager().createNamedQuery(
            "getAllInactiveForms", Form.class);
    return query.getResultList();
}

The named queries are defined as such on the Form entity:

@NamedQueries({
        @NamedQuery(name = "getAllActiveForms", query = "SELECT f FROM Form f WHERE f.isEnabled=true"),
        @NamedQuery(name = "getAllInactiveForms", query = "SELECT f FROM Form f WHERE f.isEnabled=false") })

The "currentForm" that's used in the function is picked from one of those lists.

I also noticed right now that another function in the application that simply updates a Form, now throws the same kind of exception. This time it comes from the merge()-function:

@Transactional
public Form updateAndReturn() {
    getInstance().setTimestamp(System.currentTimeMillis());
    Form f = getEntityManager().merge(getInstance());
    getEntityManager().flush();
    return f;
}

解决方案

This was caused by a bug in Hibernate. Found it here: http://issues.jboss.org/browse/JBAS-5474

It works from version 4.1.8 (https://hibernate.onjira.com/browse/HHH-6043)

The problem is with the @PostLoad, which apparently doesn't do things in the right order.

这篇关于无法懒惰地初始化一个集合,没有会话或会话被关闭(尽管急切地提取)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆