在Tapestry中,有两种(主要)获取EntityManager实例的方法:
通过直接注入
EntityManager使用entityManagerManager.getEntityManager(MyPersistenceUnit); (也被注入)的
EntityManagerManagerEntityManagerManager在其javadoc中声明,它管理每个线程一个EntityManager:
管理当前线程的
EntityManagers。根据需要创建一个EntityManager,并在每个请求的末尾关闭。
此服务的实现是按线程进行的.
这也适用于直接注射EntityManager吗?例如,如果我在一个线程中启动一个事务,如下所示:
entityManager.getTransaction().begin();EntityManager在另一个线程中的事务会是非活动的吗?也就是说,对于其他线程,EntityManager也被注入,entityManager.getTransaction().isActive()是否是假的?
更广泛地说,我对应该使用什么感到好奇。一种与另一种不同/优点是什么?
发布于 2020-10-06 20:19:33
这两种方法都是平等的,您可以使用任何具有相同保证的方法:EntityManager始终是每个线程的实例,线程之间没有任何共享。每个EntityManager在每个请求的末尾被丢弃/关闭(当调用PerthreadManager#cleanup()方法时)。
EntityManagerManager是EntityManagerObjectProvider中的一个源代码,它生成EntityManager的实例,这样您就可以简单地编写@Inject EntityManager,而不是显式地从管理器获得它。
https://stackoverflow.com/questions/64169597
复制相似问题