[SPRING] JPA - Propagation

RuiN·2022년 8월 1일
0

Spring

목록 보기
4/8
post-thumbnail

PROPAGATION

전파레벨 !
그냥 바로 설명 들어갑니다.


Propagation.REQUIRED

@Transactional(propagation = Propagation.REQUIRED)
public void required() {
    ...
}

Propagation의 기본값이다.
부모 트랜잭션 안에서 실행하고, 부모 트랜잭션이 없을 때는 새로운 트랜잭션을 생성한다.

예외가 발생하면 RollBack ! 호출 한 곳에도 RollBack 이 전파된다.


Propagation.REQUIRES_NEW

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void requiresNew() {
    ...
}

매번 새로운 트랜잭션을 실행한다.
( 새로운 연결을 생성하고 실행 )

호출한 곳에서 이미 트랜잭션이 설정 되어 있다면,
기존의 트랜잭션은 메소드가 종료될때까지 잠시 대기!
자신의 트랜잭션을 실행합니다.
( 부모 트랜잭션과 상관이 없다. )

즉, 2개의 트랜잭션이 완전 독립적으로 Act.


Propagation.NESTED

@Transactional(propagation = Propagation.NESTED)
public void nested() {
    ...
}

해당 메소드가 부모 트랜잭션에서 진행될 경우 별개로 Commit 되거나 RollBack 될 수 있다.

만약, 둘러싼 부모 트랜잭션이 없을 경우
Propagation.REQUIRED 와 동일하게 Act.

Diff >> SavePoint를 지정한 시점까지 부분 RollBack이 가능
( DB가 SavePoint 기능을 지원해야함 )


Propagation.MANDATORY

  • 부모 트랜잭션 내에서 실행 되며, 부모 트랜잭션이 없을 경우
    Exception 이 발생한다.

Propagation.SUPPORT

  • 부모 트랜잭션이 존재하면 부모 트랜잭션으로 동작하고,
    없을 경우 Non - Transactional 하게 동작

Propagation.NOT_SUPPORT

  • Non - Transactional 로 실행되며 부모 트랜잭션이 존재하면 일시정지!

Propagation.NEVER

  • Non - Transactional 로 실행되며 부모 트랜잭션이 존재하면
    Exception 이 발생!
profile
어디까지 올라갈지 궁금한 하루

0개의 댓글