PersistenceUnit与PersistenceContext
在几个项目中,我已成功使用
@PersistenceUnit(unitName = "MiddlewareJPA")EntityManagerFactory emf;
...
EntityManager entityManager = emf.createEntityManager();
获取EntityManager
数据库连接,但是几天前,我试图将项目移至Jboss EAP
6.2,但无法创建EntityManager
。我在搜索它,发现应该尝试更改@PersistenceUnit
为
@PersistenceContext(unitName = "MiddlewareJPA")private EntityManager entityManager;
获得 EntityManager 。它有效,但我不知道为什么。有什么区别bettween
PersistenceUnit
和PersistenceContext
?每个优点和缺点是什么?我们应该在哪里使用其中之一?
回答:
我不知道它在Java
EE中是如何工作的,但是在Spring中,当您指定@PersistenceContext
批注时,它会注入EntityManager
。它从哪里得到EntityManager
?EntityManager
通过调用在整个应用程序生命周期内创建一个是错误的EntityManagerFactory.createEntityManager()
。因此,改为EntityManager
使用接口的特殊实现并直接实例化。它具有对
real 的内部可变线程局部引用EntityManager
。方法的实现只是将调用重定向到此 real
EntityManager
。并且有一个servlet侦听器,该侦听器在每个请求之前EM
通过调用获取EMF.createEntityManager()
并将其分配给special的内部引用EM
。另外这款监听器调用管理事务getTransaction().begin()
,.commit()
并.rollback()
在
实际EM
。这是对已完成工作的非常简化的描述。而且我相信,JEE容器的作用与Spring相同。
在一般情况下,最好注入EntityManager
,因为和一起EntityManagerFactory
,@PersistenceUnit
您也应该EntityManager
每次都手动创建/销毁并管理事务。
以上是 PersistenceUnit与PersistenceContext 的全部内容, 来源链接: utcz.com/qa/419166.html