Java Hibernate-实体管理器管理
我正在将JPA Hibernate应用程序从JavaEE6环境迁移到Tomcat7环境 应用程序有几个DAO类在Java Hibernate-实体管理器管理,java,hibernate,jpa,entitymanager,Java,Hibernate,Jpa,Entitymanager,我正在将JPA Hibernate应用程序从JavaEE6环境迁移到Tomcat7环境 应用程序有几个DAO类在EntityManager上进行查询。在JavaEE环境中,我可以使用@PersistenceContext注释注入它,并让容器管理EntityManager。现在我必须手动操作,我想知道该怎么做 实体管理器是否应该是唯一的?如果是这样的话,它可以是一个静态final字段,在启动时创建,并且每个DAO类都使用它吗?它是否有一个包括关闭然后重新打开的生命周期?不幸的是,您必须手动操作。我
EntityManager
上进行查询。在JavaEE环境中,我可以使用@PersistenceContext
注释注入它,并让容器管理EntityManager
。现在我必须手动操作,我想知道该怎么做
实体管理器是否应该是唯一的?如果是这样的话,它可以是一个
静态final
字段,在启动时创建,并且每个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();
}
从JavaEE6迁移到Tomcat7是什么意思?你能说得更具体一点吗?应用程序是在glassfish上运行的,glassfish是一个JEE容器,因此提供了@PersistenceContext注入。现在,应用程序将在tomcat上运行,而tomcat不提供这种机制。如果出于某种原因您想离开GlassFish,为什么现在要转到TomEE?这也是Tomcat,但支持
@PersistenceContext
。因此每次访问数据库时,我都需要创建一个新的EntityManager。对吗?