我不知道它在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每次都手动创建/销毁并管理事务。



