Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@Transactional在惰性加载时不工作_Java_Spring_Jpa_Transactions_Lazy Loading - Fatal编程技术网

Java Spring@Transactional在惰性加载时不工作

Java Spring@Transactional在惰性加载时不工作,java,spring,jpa,transactions,lazy-loading,Java,Spring,Jpa,Transactions,Lazy Loading,我正在从事一个小型maven(多模块)项目,该项目负责一家书店 我当前在惰性加载实体集合时遇到问题 用户有一个订单集合,该集合是延迟加载的 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: edu.flst.bookstore.domaine.bo.User.orders, could not initialize proxy - no Session org.

我正在从事一个小型maven(多模块)项目,该项目负责一家书店

我当前在惰性加载实体集合时遇到问题

用户有一个订单集合,该集合是延迟加载的

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: edu.flst.bookstore.domaine.bo.User.orders, could not initialize proxy - no Session
org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:137)
org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
org.dozer.MappingProcessor.prepareDestinationList(MappingProcessor.java:881)
org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:806)
org.dozer.MappingProcessor.addOrUpdateToList(MappingProcessor.java:894)
org.dozer.MappingProcessor.mapListToList(MappingProcessor.java:730)
org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:580)
org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:453)
org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:361)
org.dozer.MappingProcessor.mapField(MappingProcessor.java:307)
org.dozer.MappingProcessor.map(MappingProcessor.java:267)
org.dozer.MappingProcessor.mapToDestObject(MappingProcessor.java:216)
org.dozer.MappingProcessor.createByCreationDirectiveAndMap(MappingProcessor.java:196)
org.dozer.MappingProcessor.mapGeneral(MappingProcessor.java:170)
org.dozer.MappingProcessor.map(MappingProcessor.java:104)
org.dozer.MappingProcessor.map(MappingProcessor.java:99)
org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:120)
edu.flst.bookstore.transverse.utils.mapper.MapperUtils.map(MapperUtils.java:30)
edu.flst.bookstore.service.impl.UserServiceImpl.rechercher(UserServiceImpl.java:26)
edu.flst.bookstore.presentation.controller.HomeController.index(HomeController.java:20)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
我目前正在使用Tomcat,因此无法添加JTA事务

<!-- ============================= -->
<!-- TRANSACTION MANAGER           -->
<!-- ============================= -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
我使用Spring的JPA事务管理器来处理事务

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

它实际上不起作用。我尝试在我的存储库界面(我使用的是Spring data JPA)中设置注释,但它也不起作用。

通常,如果检索包含惰性引用的实体,并且在已经离开事务上下文时第一次取消引用,就会出现此问题。由于没有从数据库中检索到引用,因此无法取消引用。AFAIK这个问题有三种解决方案:

  • 使用即时抓取从数据库获取所有内容
  • 在数据库访问层中获取必要的惰性引用以使其可用
  • 使用即使在实际的数据库访问层之后仍保持打开状态的持久事务

向我们展示如何在HomeController中获得UserServiceImpl实例。还要确保您的配置文件中有。