执行EntityManagerFactory.createEntityManager()每次都返回新实例吗?

时间:2010-06-10 05:20:47

标签: java jpa

执行EntityManagerFactory.createEntityManager()每次都会重新启动新实例吗?或者它每次都返回相同EntityManager的缓存副本?

3 个答案:

答案 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交易。
  •