Я использую JPA с Spring.Если бы я позволил Spring обработать транзакции, то мой сервисный слой выглядел бы так, если бы EntityManager был правильно введен в DAO:
MyService {
@Transactional
public void myMethod() {
myDaoA.doSomething();
myDaoB.doSomething();
}
}
Однако, если бы я делал транзакции вручную,Я должен обязательно передать этот экземпляр EntityManager в каждый из DAO в транзакции.Любая идея, как это может быть лучше рефакторинг?Я чувствую себя ужасно, делая новые MyDaoA (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();
}
}
}