【发布时间】:2020-10-02 09:54:19
【问题描述】:
在 Tapestry 中(主要)有两种方法来获取 EntityManager 实例:
- 通过直接注入
EntityManager:@Inject @PersistenceContext(unitName = MyPersistenceUnit) private EntityManager entityManager; - 通过使用
EntityManagerManager(也是注入的):EntityManager entityManager = entityManagerManager.getEntityManager(MyPersistenceUnit);
EntityManagerManager 在其 javadoc 中声明它为每个线程管理一个 EntityManager:
为当前线程管理
EntityManagers。一个EntityManager根据需要创建并在最后关闭 每个请求。这个服务的实现是每线程的。
这是否也适用于直接注入EntityManager?例如,如果我在一个线程中启动事务,就像这样:
entityManager.getTransaction().begin();
EntityManager 在另一个线程中的事务是否会处于非活动状态 - 即 entityManager.getTransaction().isActive() 对于其他线程是否为假,EntityManager 也被注入?
更一般地说,我很好奇应该使用什么。两者相比有什么区别/优势?
【问题讨论】:
标签: java jpa entitymanager tapestry hibernate-entitymanager