2011-06-30 46 views
4

我在Spring 3.0上使用JPA和Hibernate。JPA&Spring-如何从spring获取共享EntityManager?

我已经定义了LocalEntityManagerFactoryBeanJpaTransactionManager。 所有的道士有EntityManager(我想是共享的)注入@PersistenceContext,但我有一些代码,我想使用相同的EntityManager,但手动获取它。如何做到这一点?

当我刚刚解决EntityManagerFactory豆和呼叫createEntityManager,这EntityManager是从一个单独的这道的使用(通过DAO所以当我发现()和对象,我不能坚持它使用手动获得EntityManager - 实体分离)。

回答

4

有一种方法,但你应该确定你确实需要这样做。在几乎所有情况下,您都可以注入实体经理。

这里是如何,如果没有其他的选项存在这样做:

EntityManagerFactory emf = obtainEntityManagerFactory(); // you mentioned you have it 
EntityManagerHolder holder = TransactionSynchronizationManager.getResource(emf); 
EntityManager em = holder.getEntityManager(); 

总之 - 由JpaTransactionManager春天店在ThreadLocal开始实体管理每一笔交易,使用工厂的一个关键。

+0

我需要它,因为我想在Clojure代码中使用它(没有注释,我在Clojure应用程序内托管了spring context)。然而,我无法解开代理隐藏的EntityManagerFactory对象 - 所以我无法在getResource中使用它。我试图将代理转换为建议,并getTargetSource(),但没有运气。 –

+0

我无法忍受clojure。为了其他人也有类似的问题,我会保留答案。 – Bozho

相关问题