트랜잭션을 롤백하면 DB 의 변경사항만 원래대로 돌아간다고 한다.!
수정된 상태로 영속성 컨텍스트에는 남아있다고 한다.
만약 해당 내용을 모르고 JPA 를 사용한다면 엄청 위험한 상황이 도래할 수 있을 것 같다고 생각이 든다..
- 라고 생각했지만 역시 스프링 프레임워크가 트랜잭션 AOP 시점에 다 컨트롤을 하고 있었군..
어떻게 대처?
- 트랜잭션이 롤백된 영속성 컨텍스트를 그대로 사용하는 건 위험하다
- 새로운 영속성 컨텍스트를 생성
- 혹은
- 엔티티매니저 의
clear
를 호출하여 영속성 컨텍스트를 초기화한 후에 사용해야 한다!
스프링의 접근 방식
- 기본 전략
- 트랜잭션 AOP 종료 시점에 트랜잭션 영속성 컨텍스트도 종료된다고 한다.
- 롤백후에 문제가 발생하지 안흥
- 더 자세한 내용은
- JpaTransactionManager 의
doRollback()
메서드를 참조할 수 있다고 한다.
그렇다면 doRollback 의 역할은 무엇일까?
- 현재 활성화된 트랜잭션을 롤백한다.
- 트랜잭션이 시작된 이후의 모든 Insert Update Delete 를 취소하고, DB를 트랜잭션 시작 전의 상태로 되돌린다.
- 이점
- 데이터의 무결성 보장
- 로직상의 오류발생시 전후 사정을 고려하지 않고 코딩할 수 있게 도와준다
- 복잡한 트랜잭션 관리
- 개발자가 별도의 롤백 로직을 작성할 필요가 없다
- 데이터의 무결성 보장
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 쓰기 지연의 장점 등 (0) | 2023.11.19 |
---|---|
[JPA] 예외 처리 및 JPA 표준 예외 정리 (0) | 2023.11.19 |
[JPA] 영속성 컨텍스트가 같을 때의 엔티티의 비 (0) | 2023.11.19 |
[JPA 갑자기 궁금증 해결] DataJpa 에서 save 내부 동작 방식 (0) | 2023.11.19 |
[JPA] 영속성 컨텍스트가 다를때의 비교 (0) | 2023.11.19 |