Java프로그래밍

[Java Spring] 오류발생시 트랜잭션(@Transactional) 롤백이 안될 때 코드 확인 방법

AOP에서 다뤄지는 큰 이슈 하나

AOP기반으로 동작하는 트랜잭션 어노테이션은 내부함수 호출에서 트랜잭션 보장이 안된다.

그럼 어떻게 해야할까?

정답은 Proxy로 자기자신 객체를 생성하여 사용한다.

다음 예제를 보자.

public class SaveTest() {

  public void callTest() {

      // todo

      this.saveMethod();

   }

   @Transactional

   public void saveMethod(){

       Entity ent1 = Entity();

       repository.aave(ent1);

       throw new Exception(“TEST”);

   }

}

위 예제코드처럼 this로 내부함수 this.saveMethod(); 를 호출하면 Transactional 안먹힌다

해결책은 아래 예제코드와 같이 자기자신을 호출해서 사용해야 rollback이 먹힌다.

public class SaveTest() {

   @Autowired

   private SaveTest st;

  public void callTest() {

      //todo

      st.saveMethod();

  }

   @Transactional

    public void saveMethod(){

        // 위코드와 동일

    }

}

error: Content is protected !!