use*_*971 48 java persistence jpa entitymanager java-ee
在我很少成功使用的项目中
@PersistenceUnit(unitName = "MiddlewareJPA")
EntityManagerFactory emf;
...
EntityManager entityManager = emf.createEntityManager();
Run Code Online (Sandbox Code Playgroud)
获取EntityManager
数据库连接,但几天前我试图将我的项目移动到Jboss EAP 6.2
它无法创建EntityManager
.我在Google上搜寻它,我发现,我应该尝试改变@PersistenceUnit
,以
@PersistenceContext(unitName = "MiddlewareJPA")
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
获取EntityManager.它工作但我不知道为什么.有什么区别bettween PersistenceUnit
和PersistenceContext
?每个人的利弊是什么?我们应该在哪里使用其中一个?
chr*_*ke- 71
PersistenceUnit
注入EntityManagerFactory
并PersistenceContext
注入EntityManager
.PersistenceContext
除非您确实需要EntityManager
手动管理生命周期,否则通常更好.
Ale*_*eev 42
我不知道它在Java EE中是如何工作的,但是在Spring中,当你指定@PersistenceContext
注释时,它会注入EntityManager
.它在哪里EntityManager
?EntityManager
通过调用为整个应用程序生命周期创建一个是错误的EntityManagerFactory.createEntityManager()
.因此,EntityManager
使用并直接实例化接口的特殊实现.它有一个内部可变线程本地引用到真实 EntityManager
.方法的实现只是将调用重定向到这个真实的 EntityManager
.并且有一个servlet监听器,在每个请求EM
通过调用获得EMF.createEntityManager()
并将其分配给特殊的内部引用之前EM
.另外这款监听器调用管理事务getTransaction().begin()
,.commit()
并.rollback()
在实际 EM
.它是执行工作的非常简化的描述.而且我相信,JEE容器和Spring一样做同样的事情.
在一般情况下,最好是注入EntityManager
,因为使用EntityManagerFactory
和@PersistenceUnit
你应该EntityManager
每次手动创建/销毁并管理交易.
Raj*_*Raj 11
通过@PersistenceContext获得的EntityManager称为容器管理的EntityManager,因为容器将负责管理" EntityManager ".通过@PersistenceUnit/entityManagerFactory.createEntityManager()获得的EntityManager由开发人员在应用程序中管理.(例如,管理EntityManager的生命周期,释放EntityManager获取的资源等).
归档时间: |
|
查看次数: |
25412 次 |
最近记录: |