이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발]을 수강하며 정리한 글입니다.
🟦 기본 환경: IDE: IntelliJ, Language: Java
@Transactional
: 선언적 Transaction, 해당 범위 내 메서드가 트랜잭션이 되도록 보장
: 클래스, 메소드에 @Transactional이 선언되면 해당 클래스에 트랜잭션이 적용된 프록시 객체 생성
→ 프록시 객체는 @Transactional이 포함된 메서드가 호출될 경우, 트랜잭션을 시작하고 Commit or Rollback을 수행
* CheckedException or 예외가 없을 때는 Commit
UncheckedException이 발생하면 Rollback
즉, @Transactional를 선언함으로써 연산의 원자성이 보장되어, 연산이 도중에 실패할 경우 변경사항이 Commit되지 않음
@Transactional 우선 순위
Class Method > Class > Interface Method > Interface
@Transactional 주의 사항
1. Public Method에서만 사용 가능
2. @Transactional이 적용되지 않은 Public Method에서 @Transactional이 적용된 Public Method를 호출할 경우, 트랜잭션이 동작 X
참고 자료
'Java > JPA' 카테고리의 다른 글
[SpringBoot_JPA_1] TypedQuery (0) | 2023.06.02 |
---|---|
[SpringBoot_JPA_1] @NoArgsConstructor (1) | 2023.05.30 |
[SpringBoot_JPA_1] Dirty Checking & Merge (0) | 2023.05.28 |
[SpringBoot_JPA_1] StringUtils.hasText() (0) | 2023.05.27 |
[SpringBoot_JPA_1] create Private Method (0) | 2023.05.27 |