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

