首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挂毯‘`EntityManager`’vs‘`EntityManager`’

挂毯‘`EntityManager`’vs‘`EntityManager`’
EN

Stack Overflow用户
提问于 2020-10-02 09:54:19
回答 1查看 50关注 0票数 1

在Tapestry中,有两种(主要)获取EntityManager实例的方法:

通过直接注入

  1. :@Inject @PersistenceContext(unitName = MyPersistenceUnit)私有EntityManager EntityManager

使用entityManagerManager.getEntityManager(MyPersistenceUnit); (也被注入)的

  1. :EntityManager entityManager = EntityManagerManager

EntityManagerManager在其javadoc中声明,它管理每个线程一个EntityManager

管理当前线程的EntityManagers。根据需要创建一个EntityManager,并在每个请求的末尾关闭。

此服务的实现是按线程进行的.

这也适用于直接注射EntityManager吗?例如,如果我在一个线程中启动一个事务,如下所示:

代码语言:javascript
复制
entityManager.getTransaction().begin();

EntityManager在另一个线程中的事务会是非活动的吗?也就是说,对于其他线程,EntityManager也被注入,entityManager.getTransaction().isActive()是否是假的?

更广泛地说,我对应该使用什么感到好奇。一种与另一种不同/优点是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 20:19:33

这两种方法都是平等的,您可以使用任何具有相同保证的方法:EntityManager始终是每个线程的实例,线程之间没有任何共享。每个EntityManager在每个请求的末尾被丢弃/关闭(当调用PerthreadManager#cleanup()方法时)。

EntityManagerManagerEntityManagerObjectProvider中的一个源代码,它生成EntityManager的实例,这样您就可以简单地编写@Inject EntityManager,而不是显式地从管理器获得它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64169597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档