当我们需要多个EntityManager时?

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

在哪些情况下,我们的应用程序中需要多个EntityManager

我所知道的两种情况如下:

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

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


Q1。 当我们需要多个EntityManager时还有其他情况吗?

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

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

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