19

我正在学习 JPA 并且有一个问题:

在哪些情况下,我们的应用程序需要不止一个EntityManager

我知道的两种情况如下:

  • 当我们的应用程序是多线程应用程序并且多个线程需要 JPA 事务时,因为EntityManager它不是线程安全的,我们EntityManager每个线程都需要一个。

  • 当任何线程需要多个并发事务时,我们在该线程中需要多个事务,因为和EntityManager之间存在一对一的关系。EntityManagerEntityTransaction


Q1。当我们需要不止一个时,还有其他情况EntityManager吗?

Q2。EntityManagerFactory据我了解,每个 Persitence Unit应该只有一个。我对么?EntityManagerFactory如果不是,那么当我们需要每个持久性单元多个时,那些情况是什么?

4

1 回答 1

12

Q1:EntityManager最好与“旧的”Hibernate 进行比较Session:一个工作单元(一个简单的业务操作,例如“登录用户”、“下订单”等)。它不一定绑定到单个线程。只有当不同的线程在单个工作单元内执行相互依赖的数据库任务时,您才会遇到麻烦。您需要同步执行它们(最好在单个线程中按顺序执行)。例如,如果您有业务要求在用户登录时清理一些“旧日志”(这合理地不会干扰彼此的信息),您可以在单个工作单元内的两个单独线程中完美地执行它。

Q2:您的理解是正确的。但是,您可以创建多个,但这没有任何意义也没有任何好处。它只会增加大量开销。

于 2010-04-06T16:55:40.837 回答