Tengo 2 métodos en mi servicio
public void updateAll() { long[] ids = new long[] {1,2,3,4,5,6,7,8,9,10}; for (long id : ids) { updateId(id); } } public updateId(long id) { repository.update(id); }Supongamos que después de la quinta actualización tengo una excepción, me gustaría que las primeras 4 operaciones se confirmen de todos modos.
Estoy usando la anotación @Transactional pero si pongo la anotación en ambos métodos no funciona.
¿Necesito otro parámetro? puede ser propagacion??
¿Podría mostrarme cómo configurar estos métodos?
¡¡Gracias!!
Necesita un @Transactional separado en updateId con REQUIRES_NEW .
Solo tienes:
@Transactional(propagation = Propagation.REQUIRES_NEW) public updateId(long id) { }Pero, lo importante, llama a ese método desde otra clase. es decir, mueva su ciclo fuera de esta clase.
Las anotaciones transaccionales solo se activan cuando se llama a ese método público desde el exterior. Dentro de la misma clase, llamar a un método transaccional desde otro solo usará la transacción del primer método.