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

PersistenceUnitPersistenceContext?每个优点和缺点是什么?我们应该在哪里使用其中之一?

回答:

我不知道它在Java

EE中是如何工作的,但是在Spring中,当您指定@PersistenceContext批注时,它会注入EntityManager。它从哪里得到EntityManagerEntityManager通过调用在整个应用程序生命周期内创建一个是错误的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

回到顶部