我正在使用Spring的JPA。如果我让Spring处理事务,那么假设EntityManager已经正确注入到DAO中,我的Service层将如下所示:
MyService {
@Transactional
public void myMethod() {
myDaoA.doSomething();
myDaoB.doSomething();
}
}
然而,如果我要手动进行交易,我必须确保将这个EntityManager实例传递到事务中的每个DAO中。有什么好的重构方法吗?我觉得使用new MyDaoA(em)或像doSomething(em)这样在每个DAO方法中传递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();
}
}
}