当我们需要多个实体管理器时?

2022-09-02 10:51:24

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

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

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

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

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


问题 1.当我们需要多个时,还有其他情况吗?EntityManager

问题 2.据我所知,每个Peritence单位应该只有一个。我说的对吗?如果不是,那么当我们每个持久性单元需要多个时,这些情况是什么?EntityManagerFactoryEntityManagerFactory


答案 1

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

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


答案 2

推荐