我正在使用JPA和Spring。如果我让Spring处理事务,那么这是我的服务层将是什么样子假设的EntityManager已经正确注入的DAO:用于JPA的手动事务服务和DAO层与弹簧
MyService {
@Transactional
public void myMethod() {
myDaoA.doSomething();
myDaoB.doSomething();
}
}
不过,如果我是做手工交易,我有确保将EntityManager的实例传递到事务内的每个DAO中。任何想法如何能更好地重构?我收取新的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();
}
}
}
我还不清楚,我怎么会去这样做手工交易与服务和DAO层。 – Langali 2011-04-28 15:59:46
a)如果我必须这样做,我可能会使用TransactionTemplate或JpaTemplate b)不要这样做。这是一个痛苦。 – 2011-04-28 16:02:00
对不起,这超出了这个问题的范围。阅读Spring参考资料,特别是交易管理部分http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html和ORM http://static.springsource.org /spring/docs/3.0.x/spring-framework-reference/html/orm.html(提示:异常翻译是你的朋友) – 2011-04-28 16:58:03