es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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é.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código está utilizando una anotación @Transactional en el método transactionTest(). 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 una NullPointerException, que es una subclase de RuntimeException. Dado que esta excepción está siendo lanzada, la transacción debería ser revertida y memberRepository.save(m) no debería ser ejecutado.

Comments are closed.