Hor*_*wka 5 java spring hibernate jpa clojure
我在 Spring 3.0 上使用 JPA 和 Hibernate。
我定义了 aLocalEntityManagerFactoryBean和JpaTransactionManager。所有 Daos 都有一个EntityManager(我猜是共享的)注入@PersistenceContext,但我有一些代码我想使用相同的EntityManager,但手动获取它。如何做到这一点?
当我只是解析EntityManagerFactorybean 和 call 时createEntityManager,这EntityManager与 Dao 使用的 bean 是分开的(因此,当我通过 DAO find() 和对象时,我无法使用手动获取的方式持久化它EntityManager- 实体已分离)。
有一种方法,但您应该确定您确实需要它。在几乎所有情况下,您都可以注入实体管理器。
如果不存在其他选项,请执行以下操作:
EntityManagerFactory emf = obtainEntityManagerFactory(); // you mentioned you have it
EntityManagerHolder holder = TransactionSynchronizationManager.getResource(emf);
EntityManager em = holder.getEntityManager();
Run Code Online (Sandbox Code Playgroud)
简而言之 - 对于由 spring 启动的每个事务,JpaTransactionManager将实体管理器存储在 a 中ThreadLocal,并使用工厂作为密钥。
| 归档时间: |
|
| 查看次数: |
7674 次 |
| 最近记录: |