我正在使用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