Estoy usando JPA con Spring. Si tuviera que dejar que la primavera manejar las transacciones, entonces esto es lo que se vería mi capa de servicios como asumir el EntityManager se ha inyectado correctamente en los DAOs:Servicio Transaccional Manual y capa DAO para JPA con Spring
MyService {
@Transactional
public void myMethod() {
myDaoA.doSomething();
myDaoB.doSomething();
}
}
Sin embargo, si tuviera que hacer transacciones de forma manual, no tengo para asegurarse de pasar esa instancia de EntityManager a cada uno de los DAO dentro de una transacción. ¿Alguna idea de cómo se puede refactorizar mejor? Me pagan feo haciendo MyDaoA (em) nuevo o pasándolos en cada método DAO como 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();
}
}
}
todavía estoy claro en cuanto a cómo iba a ir haciendo las transacciones manuales con un servicio y DAO capa. – Langali
a) Probablemente usaría TransactionTemplate o JpaTemplate si tuviera que hacerlo b) no lo haga. Es un dolor. –
Lo sentimos, esto va más allá del alcance de esta pregunta. Lea la referencia de Spring, especialmente las secciones Transaction Management http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html y ORM http://static.springsource.org /spring/docs/3.0.x/spring-framework-reference/html/orm.html (sugerencia: la traducción de excepciones es tu amigo) –