当我们需要多个EntityManager时?
我正在学习JPA并且有一个问题:
在哪些情况下,我们的应用程序中需要多个EntityManager
?
我所知道的两种情况如下:
-
当我们的应用程序是一个multithreading应用程序并且多个线程需要JPA事务时,因为
EntityManager
不是线程安全的,我们每个线程需要一个EntityManager
。 -
当任何线程需要多个并发事务时,我们在该线程中需要多个
EntityManager
,因为EntityManager
和EntityTransaction
之间存在一对一的关系。
Q1。 当我们需要多个EntityManager
时还有其他情况吗?
Q2。 根据我的理解,每个Persitence单元应该只有一个EntityManagerFactory
。 我对么? 如果没有,那么当每个持久性单元需要多个EntityManagerFactory
时,那些情况是什么?
Q1: EntityManager
最好与“老旧的”Hibernate Session
进行比较:一个工作单元(一个简单的业务操作,例如“登录用户”,“下订单”等)。 它不一定与单个线程相关联。 如果不同的线程执行在单个工作单元内相互依赖的DB任务,则只会遇到麻烦。 您需要同步执行它们(最好是在单个线程中按顺序执行)。 例如,如果您有用户登录时清理某些“旧日志”的业务要求(这可能不会打扰彼此的信息),您可以在单个工作单元内的两个单独的线程中完美地执行它。
Q2:您的理解是正确的。 但是,您可以创建多个,但这没有任何意义,也没有任何好处。 它只会增加很大的开销。
- 如何在Spring中的共享EntityManager上手动启动事务?
- 如何在相对较大的应用程序中使用Entity Manager管理数据库事务?
- 如何在Spring Roo中使用JUnit测试? (EntityManager的问题)
- Hibernate EntityManager,它应该被用作单例吗?
- 当使用EntityManager的createQuery()和find()方法时?
- 我们如何才能获得JPA EntityManager Flush工作
- entityManager.getTransaction()。rollback()分离实体?
- 为什么在首先合并实体时,我会将已删除的实例传递给合并
- 是否有无状态版本的JPA EntityManager?