执行EntityManagerFactory.createEntityManager()每次都会重新启动新实例吗?或者它每次都返回相同EntityManager的缓存副本?
答案 0 :(得分:2)
Javadoc毫不含糊:
创建一个新的应用程序管理 EntityManager的。这个方法返回一个 每次都有新的EntityManager实例 它被调用。
答案 1 :(得分:0)
每次调用EntityManagerFactory.createEntityManager()时,EntityManagerFactory都会返回EntityManager的新实例。
如果你执行......
emf = Persistence.createEntityManagerFactory("basicPU");
for (int i = 0 ; i<10; i++){
System.out.println(em = emf.createEntityManager());
}
它打印:
org.apache.openjpa.persistence.EntityManagerImpl@18105e8
org.apache.openjpa.persistence.EntityManagerImpl@9bad5a
org.apache.openjpa.persistence.EntityManagerImpl@91f005
org.apache.openjpa.persistence.EntityManagerImpl@1250ff2
org.apache.openjpa.persistence.EntityManagerImpl@3a0ab1
org.apache.openjpa.persistence.EntityManagerImpl@940f82
org.apache.openjpa.persistence.EntityManagerImpl@864e43
org.apache.openjpa.persistence.EntityManagerImpl@17c2891
org.apache.openjpa.persistence.EntityManagerImpl@4b82d2
org.apache.openjpa.persistence.EntityManagerImpl@179d854
答案 2 :(得分:0)
对于第二个skaffman的回答,这是JPA 1.0规范的摘录:
5.9.2提供者责任
提供商不了解 事务范围之间的区别 和扩展的持久化上下文。它 提供实体经理 容器请求和注册 用于同步通知 交易。
- 何时
EntityManagerFactory.createEntityManager
被调用,提供者必须创建 并返回一个新的实体经理。如果 一个JTA交易是活跃的, 提供者必须注册 同步通知 JTA交易。