【发布时间】:2011-08-14 07:29:04
【问题描述】:
我在 Spring 中使用 JPA。如果我让 Spring 处理事务,那么假设 EntityManager 已正确注入 DAO,这就是我的服务层的样子:
MyService {
@Transactional
public void myMethod() {
myDaoA.doSomething();
myDaoB.doSomething();
}
}
但是,如果我要手动执行事务,我必须确保将该 EntityManager 实例传递到事务中的每个 DAO。知道如何更好地重构吗?我觉得做 new MyDaoA(em) 或将 em 传递给每个 DAO 方法(如 doSomething(em))很难看。
MyService {
private EntityManagerFactory emf;
public void myMethod() {
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
MyDaoA myDaoA = new MyDaoA(em);
MyDaoB myDaoB = new MyDaoB(em);
try {
tx.begin();
myDaoA.doSomething();
myDaoB.doSomething();
tx.commit();
} catch(Exception e) {
tx.rollback();
}
}
}
【问题讨论】:
标签: java hibernate spring jpa transactions