java - Hibernate - EntityManager 管理

标签 java hibernate jpa entitymanager

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

该应用程序有多个 DAO 类在 EntityManager 上进行查询。在 Java EE 环境中,我可以使用 @PersistenceContext 注释注入(inject)它,并让容器管理 EntityManager。现在我必须手动完成,我想知道该怎么做。

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

最佳答案

不幸的是,您必须手动执行此操作。我通常的做法是定义一个特殊的类:

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();
}

关于java - Hibernate - EntityManager 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14354830/

相关文章:

java - 如何控制JavaFX TextArea自动滚动?

java - 如何使用java正则表达式来匹配一行

java - 根据位数分割给出的时间

java - 无法填充池(没有可用的缓冲区空间)

hibernate - Grails CriteriaBuilder 添加限制

java - 删除右上角的关闭 (X) 按钮并在 JFrame 上保留最小/最大

java - Hibernate、DB2 - 查询运行缓慢

jpa - IllegalArgumentException:您试图为预期类型为 java.math.BigDecimal 的参数标记设置类型为 java.lang.String 的值

hibernate - Spring Boot JPA 和 JDBC 可以共享相同的数据源/连接吗?

jsf - 搜索功能没有执行任何操作