使用OpenEntityManagerInViewFilter进行延迟初始化?
我有一点已经在使用JBoss webapp,以及一个懒惰的初始化问题。 因此我被建议在Spring中进行调查并使用OpenEntityManagerInViewFilter
。
不过我仍然得到错误,希望你能帮助我吗? 我还需要在应用程序中更改哪些内容才能使用Spring OEMfilter?
我的设置是这样的:
@Entity class Customer; @Stateless @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) class DaoService { @PersistenceContext EntityManager em; } @Named @RequestScoped class CustomerFacade;
+ jsf的东西。
[javax.enterprise.resource.webcontainer.jsf.context] (http--127.0.0.1-8080-1) org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: domain.Customer.customerList, no session or session was closed
我这样设置:web.xml
OpenEntityManagerInViewFilter org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter singleSession true flushMode AUTO OpenEntityManagerInViewFilter /* org.springframework.web.context.ContextLoaderListener org.springframework.web.context.request.RequestContextListener
applicationContext.xml中:
org.hibernate.transaction.JBossTransactionManagerLookup
persistence.xml中:
java:jboss/datasources/ExampleDS
这基本上就是所有的设置。 一切都与懒惰加载问题分开。
确保您不访问旧实体(例如,在先前请求中的会话中的序列化实体)。
有必要在init参数中指明EntityManager
OpenEntityManagerInViewFilter org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter entityManagerFactoryBeanName entityManagerFactory flushMode AUTO