La anotación transaccional de rollback de Spring parece no funcionar correctamente en la prueba.
Este es el código del controlador:
java
@GetMapping(“/test/hello”)
public String test() {
Member m = memberService.transactionTest();
return “haha”;
}
y este es el código del servicio:
@Transactional(rollbackFor = NullPointerException.class)
public Member transactionTest() {
Member m = Member.builder()
.username("rollback")
.age(32)
.team(teamRepository.findById(1L).get())
.coach(coachRepository.findById(1L).get())
.build();
memberRepository.save(m);
exception();
return m;
}
public void exception(){
Member m = null;
m.getUsername();
}
Hasta donde yo sé, debería hacer rollback al finalizar porque se produce una RuntimeException, pero el proceso de inserción funciona muy bien, así que quiero saber por qué.
davy.ai
Parece que el código está utilizando una anotación
@Transactional
en el métodotransactionTest()
. Esta anotación hará que el método se ejecute dentro de una transacción, y si se producen excepciones, la transacción será revertida.En este caso, el método
exception()
está arrojando unaNullPointerException
, que es una subclase deRuntimeException
. Dado que esta excepción está siendo lanzada, la transacción debería ser revertida ymemberRepository.save(m)
no debería ser ejecutado.