2013-09-23 29 views
13

我已經發現了幾個問題和答案對於這個問題上,所以任何會話相關的,但他們似乎都掩蓋了問題的一個重要原因:獲取集合的事務之外或其他事務中。但在我的情況下,我在獲取父對象和集合時在同一個事務中進行讀取。休眠收集未與

@Service 
@Transactional 
public class IntegrationServiceImpl implements IntegrationService { 
@Override 
    public Integration getIntegrationByIdFetchBackendParameters(Long integrationId) { 
     Integration integration = integrationDao.get(integrationId); 
     //not all integrations have to have backend. 
     if (integration.getBackend() != null) { 
      Hibernate.initialize(integration.getBackend().getBackendParameters()); 
     } 
     return integration; 
    } 
... 

但說到在org.hibernate.collection.internal.AbstractPersistentCollection 到這個狀態,Hibernate.initialize分支執行

if (session == null) { 
       throw new HibernateException("collection is not associated with any session"); 
      } 

我不能明白爲什麼sessionnull。有人會解釋這一點並提出解決方案嗎?

EDIT 1 - 全堆棧跟蹤

org.hibernate.HibernateException: collection is not associated with any session 
     at org.hibernate.collection.internal.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:676) 
     at org.hibernate.Hibernate.initialize(Hibernate.java:77) 
     at com.dhl.finFw.service.IntegrationServiceImpl.getIntegrationByIdFetchBackendParameters(IntegrationServiceImpl.java:169) 
     at com.dhl.finFw.web.integration.IntegrationOverviewManagedBean.loadIntegration(IntegrationOverviewManagedBean.java:59) 
     at com.dhl.finFw.web.integration.AbstractIntegrationManagedBean.initCommonFields(AbstractIntegrationManagedBean.java:69) 
     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:606) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:344) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:295) 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:399) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1481) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:333) 
     at com.dhl.finFw.spring.scope.ViewScope.get(ViewScope.java:30) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:329) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117) 
     at org.springframework.beans.factory.access.el.SpringBeanELResolver.getValue(SpringBeanELResolver.java:56) 
     at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
     at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
     at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72) 
     at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
     at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
     at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68) 
     at org.apache.el.parser.AstValue.getValue(AstValue.java:161) 
     at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
     at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
     at com.sun.faces.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:161) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 
     at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:166) 
     at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
     at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:320) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:379) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:358) 
     at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199) 
     at com.sun.faces.facelets.tag.ui.IncludeHandler.apply(IncludeHandler.java:120) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 
     at com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:106) 
     at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:178) 
     at com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:395) 
     at com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:366) 
     at com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:111) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) 
     at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:187) 
     at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 
     at com.sun.faces.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:179) 
     at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) 
     at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
     at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:320) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:379) 
     at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:358) 
     at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199) 
     at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155) 
     at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
     at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87) 
     at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:164) 
     at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:870) 
     at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at com.dhl.finFw.web.filter.FileNotFoundFilter.doFilter(FileNotFoundFilter.java:40) 
     at com.dhl.finFw.web.filter.FileNotFoundFilter.doFilter(FileNotFoundFilter.java:35) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:64) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
     at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     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:502) 
     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:953) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
     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:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:724) 

編輯2 - 構

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <bean id="environmentVariablesConfiguration" 
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> 
     <property name="algorithm" value="PBEWithMD5AndDES" /> 
     <property name="passwordSysPropertyName" value="APP_ENCRYPTION" /> 
    </bean> 

    <bean id="configurationEncryptor" 
      class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> 
     <property name="config" ref="environmentVariablesConfiguration" /> 
    </bean> 


    <bean id="propertyConfigurer" 
      class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer"> 
     <constructor-arg ref="configurationEncryptor" /> 
     <property name="locations"> 
      <list> 
       <value>${finFw.config.location}finFwUI.properties</value> 
       <value>classpath:application.properties</value> 
       <value>classpath:dateTime.properties</value> 
      </list> 
     </property> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    </bean> 

    <context:component-scan base-package="com.dhl.finFw"/> 

    <context:annotation-config/> 

    <tx:annotation-driven/> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="persistenceUnitName" value="FINFW"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="generateDdl" value="${finFwUI.orm.generateDdl:false}"/> 
       <property name="showSql" value="${finFwUI.orm.showSql:false}"/> 
       <property name="databasePlatform" value="${finFwUI.orm.dialect}"/> 
      </bean> 
     </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

    <aop:aspectj-autoproxy/> 

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> 
     <property name="scopes"> 
      <map> 
       <entry key="view"> 
        <bean class="com.dhl.finFw.spring.scope.ViewScope"/> 
       </entry> 
      </map> 
     </property> 
    </bean> 

    <bean class="org.springframework.web.context.support.ServletContextAttributeExporter"> 
     <property name="attributes"> 
      <map> 
       <entry key="finFwUIEnvironment" value="${finFwUI.environment}" /> 
      </map> 
     </property> 
    </bean> 

    <bean id="eventListenerBean" class="com.dhl.finFw.spring.FinFwApplicationListener" /> 

</beans> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name>FinFwUI</display-name> 
    <description>Financial Framework Configuration</description> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>fileServlet</servlet-name> 
     <servlet-class>com.dhl.finFw.web.FileServlet</servlet-class> 
    </servlet> 
    <!-- Location of the Log4J config file, for initialization and refresh checks. 
     Applied by Log4jConfigListener. The variable is replaced with System property 
     at runtime. --> 
    <context-param> 
     <param-name>log4jConfigLocation</param-name> 
     <param-value>${finFw.config.location}log4j-finFwUI.properties</param-value> 
    </context-param> 
    <!-- Application version. The variable is replaced during Maven build. --> 
    <context-param> 
     <param-name>applicationVersion</param-name> 
     <param-value>${applicationVersion}</param-value> 
    </context-param> 
    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>dhl</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
     <param-value>/WEB-INF/springsecurity.taglib.xml</param-value> 
    </context-param> 

    <!-- possible values: Development, Production, SystemTest, UnitTest The 
     variable is replaced during Maven build or set as System property during 
     development. --> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>${finFwUI.jsf.stage}</param-value> 
    </context-param> 
    <!-- Spring application context config locations --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:com/dhl/finFw/finFwUI-core.xml 
      classpath:com/dhl/finFw/finFwUI-dataSource.xml 
      classpath:com/dhl/finFw/finFwUI-security.xml 
      classpath:com/dhl/finFw/finFwUI-forms.xml 
      classpath:com/dhl/finFw/finFwUI-audit.xml 
     </param-value> 
    </context- 
    <context-param> 
     <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <session-config> 
     <session-timeout>60</session-timeout> 
    </session-config> 
    <!-- Configures Log4J for this web app. As this context specifies a context-param 
     "log4jConfigLocation", its file path is used to load the Log4J configuration. --> 
    <listener> 
     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
    <!-- Starts Spring application context. The parent one. The web context 
     is started by Dispatcher servlet. --> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
    </listener> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>fileServlet</servlet-name> 
     <url-pattern>/file/*</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
     <welcome-file>/pages/protected/index.xhtml</welcome-file> 
    </welcome-file-list> 
    <filter> 
     <filter-name>encoding-filter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter> 
     <filter-name>fileNotFoundFilter</filter-name> 
     <filter-class>com.dhl.finFw.web.filter.FileNotFoundFilter</filter-class> 
    </filter> 

    <filter> 
     <filter-name>browserCacheControlFilter</filter-name> 
     <filter-class>com.dhl.finFw.web.filter.BrowserCacheControlFilter</filter-class> 
    </filter> 
    <filter> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>encoding-filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>fileNotFoundFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
     <filter-name>browserCacheControlFilter</filter-name> 
     <url-pattern>/pages/protected/integration/subscriptionScheduler.xhtml</url-pattern> 
    </filter-mapping> 

    <error-page> 
     <exception-type>org.springframework.security.access.AccessDeniedException</exception-type> 
     <location>/pages/public/error/accessDenied.xhtml</location> 
    </error-page> 
    <error-page> 
     <exception-type>java.lang.Throwable</exception-type> 
     <location>/pages/public/error/internal.xhtml</location> 
    </error-page> 
    <error-page> 
     <error-code>500</error-code> 
     <location>/pages/public/error/internal.xhtml</location> 
    </error-page> 
    <error-page> 
     <error-code>404</error-code> 
     <location>/pages/public/error/notFound.xhtml</location> 
    </error-page> 
    <error-page> 
     <error-code>403</error-code> 
     <location>/pages/public/error/accessDenied.xhtml</location> 
    </error-page> 
</web-app> 

ViewScope.java

public class ViewScope implements Scope { 

    private Logger logger = LoggerFactory.getLogger(getClass()); 

    public static final String VIEW_SCOPE_CALLBACKS = "viewScope.callbacks"; 

    @Override 
    public Object get(String name, ObjectFactory<?> objectFactory) { 
     Map<String, Object> viewMap = getViewMap(); 
     Object instance = viewMap.get(name); 
     if (instance == null) { 
      instance = objectFactory.getObject(); 
      synchronized (viewMap) { 
       viewMap.put(name, instance); 
       logger.debug("Bean '{}' has been put to ViewScope.", instance); 
      } 
     } else { 
      logger.debug("Going to return an existing bean '{}'", instance); 
     } 
     return instance; 
    } 


    @Override 
    public Object remove(String name) { 
     Object instance = getViewMap().remove(name); 
     if (instance != null) { 
      Map<String, Runnable> callbacks = (Map<String, Runnable>) getViewMap().get(VIEW_SCOPE_CALLBACKS); 
      if (callbacks != null) { 
       callbacks.remove(name); 
       logger.debug("Bean '{}' has been removed.", instance); 
      } 
     } 
     return instance; 
    } 

    @Override 
    public void registerDestructionCallback(String name, Runnable runnable) { 
     Map<String, Runnable> callbacks = (Map<String, Runnable>) getViewMap().get(VIEW_SCOPE_CALLBACKS); 
     if (callbacks != null) { 
      callbacks.put(name, runnable); 
      logger.debug("Registered callback for '{}'", name); 
     } 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public Object resolveContextualObject(String name) { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     FacesRequestAttributes facesRequestAttributes = new FacesRequestAttributes(facesContext); 
     return facesRequestAttributes.resolveReference(name); 
    } 

    @Override 
    public String getConversationId() { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     FacesRequestAttributes facesRequestAttributes = new FacesRequestAttributes(facesContext); 
     return facesRequestAttributes.getSessionId() + "-" + facesContext.getViewRoot().getViewId(); 
    } 

    private Map<String, Object> getViewMap() { 
     return FacesContext.getCurrentInstance().getViewRoot().getViewMap(); 
    } 

} 
+0

請加滿堆棧跟蹤... –

+0

我已經添加了完整的堆棧跟蹤。請參閱編輯。 – DominikM

+1

stacktrace表示沒有事務正在進行。基本上你的'@ Transactional'沒有做任何事情。發佈您的配置(包括web.xml) –

回答

0

好像你把這個在你的AbstractIntegrationManagedBeaninit方法。

你必須確保休眠獲取點之前設置正確。

最有可能你的配置不反映並承擔冬眠是已經存在,雖然目前還沒有保證。

看到這個問題的更多細節:How to control order of bean init-method invocation in Spring?

5

爲了防止在我的應用程序LazyLoadingException,我用的是第一合併實體回會話的輔助方法,然後初始化請求的集合。它最近證明,儘管會議似乎是開放式的,並且整體看起來不錯,但有時它仍然患有「收集與任何會議無關」的問題。我很難說這種行爲的原因是什麼,但我仍然發現了一種補救辦法。嘗試在使用session.refresh(entity)獲取延遲收集之前刷新實體狀態。這將導致Hibernate從數據庫重新加載實體。完成此操作後,您當前的會話將允許您使用Hibernate.initialize()平穩加載收藏。

+1

您的「集合與任何會話無關」的問題可能會持續存在,因爲您已將實體合併到會話中的助手方法發生錯誤。我發現很容易意外地仍舊使用舊的(未裝入的)實體的句柄,這當然會讓Hibernate不安。 – Lisa

0

我也有這個問題,但是對我來說,問題是,我不是在我的配置文件中配置事務管理這樣:

添加@EnableTransactionManagement到Java配置文件 或 添加<tx:annotation-driven/>到XML配置文件

8

我解決了這個問題,只是將@Transactional放在方法的頂部。

+0

只需添加一個重要的細節:@ @ Transactional註釋應該放在呼叫層次結構中足夠高的位置。把它放在最終使用這種代理屬性的低級方法之上,不會解決任何問題。它應該放在一個方法上,從你的對象加載的地方開始,並從那個需要該屬性的方法被調用的地方開始。將這些調用可視化爲一棵樹,您的'@Transactional'註釋應該位於根目錄(當然,也不會高於必要的)。 – delucasvb

0

我解決了這個問題,只是將@Transactional放在方法的頂部。 並且還通過其ID獲取類是這樣的:

Test s=get(test.getId()) 
+0

嗨Nitheesh,歡迎來到SO。考慮添加有關此解決方案如何解決問題的詳細信息。請參閱http://stackoverflow.com/help/how-to-answer。 –

0

由於@Zmicier Zaleznicenka指出,這種異常消息可能無關的會議。 我們也遇到過這個問題,但根本原因是映射文件中定義的實體主鍵設置不正確。例如,在下面的代碼中,數據庫列「Foo_SK」不是該表的唯一標識符。

Id(x => x.Id, "Foo_SK").GeneratedBy.Assigned(); 

在我們的案例中,我們無法控制數據庫模式。因此,我們通過使用組合鍵映射來解決問題。

Please check the other post for the same issue.