与我的其他问题有点相关应该从数据访问层或接口返回原始的 Hibernate 注释 POJO 吗?,我在创建良好解耦的层方面经验丰富,但不使用 Hibernate 或 J2EE/JPA。我一直在查看文档和教程,对如何以优雅的方式使用 EntityManger 感到困惑,因为它似乎负责事务(我想在我的服务层执行)和持久性方法(我想要保存在数据访问层中)。我应该在服务层创建它并将其注入数据访问层,还是有更好的方法?下面的伪java大致显示了我正在考虑做的事情。
编辑:我下面的伪代码基本上取自 hibernate JPA 教程并针对层分离进行了修改,并不反映正在开发该产品以在 EJB 容器(Glassfish)中运行。在您的答案中,请提供在 Glassfish 或等效程序中运行的代码的最佳实践和代码示例。
MyService
{
setup()
{
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory( "Something" ); //is the String you pass in important?
entityManager = entityManagerFactory.createEntityManager();
}
myServiceMethod()
{
entityManager.getTransaction().begin();
MyDao.setEntityManager(entityManagerFactory);
MyDao.doSomething();
MyDao.doSomethingElse();
entityManager.getTransaction().commit();
entityManager.close();
}
}
MyDao
{
doSomething()
{
entityManager.persist(...); //etc
}
}