0

我正在将 JPA-Hibernate 应用程序从 Java EE 6 环境移动到 Tomcat 7 环境。

该应用程序有几个 DAO 类在EntityManager. 在 Java EE 环境中,我可以使用@PersistenceContext注解注入它,并让容器管理EntityManager. 现在我必须手动完成,我想知道该怎么做。

实体管理者应该是唯一的吗?如果是这样,它可以是一个static final在启动时创建并且每个 DAO 类都使用的字段吗?它是否有一个涉及关闭它然后重新打开它的生命周期?

4

1 回答 1

2

不幸的是,您必须手动完成。我通常这样做的方式是定义一个特殊的类:

public class EMF {
  private static EntityManagerFactory factory = Persistence.createEntityManagerFactory("name");

  public static EntityManager getEntityManager() {
    return factory.createEntityManager();
  }
}

因此,每次您需要 EntityManager 时,您都必须手动创建它。您还需要处理事务:

EntityManager em = EMF.getEntityManager();
EntityTransaction et = em.getTransaction();
try {
  MyEntity my = new MyEntity();
  et.begin();
  try {
    em.persist(my);
    et.commit();
  } catch (Exception ex) { 
    if (et.isActive())
      et.rollback();
  }
} finally {
  em.close();
}
于 2013-01-16T09:38:28.307 回答