public enum Propagation {
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
NEVER(TransactionDefinition.PROPAGATION_NEVER),
NESTED(TransactionDefinition.PROPAGATION_NESTED);
...
...
}
REQUIRED : (Default) 만약 기존에 사용하던 트렌젝션이 있다면 그 트랜젝션을 사용하고 없다면 생성해서 사용한다. 어찌보면 가장 직관적이다. 트랜젝션이 필요한데 있다면 재활용하고 없다면 내가 직접 만들어서 사용하겠다는 뜻이다. save() 메서드가 REQUIRED 이다.
- save()는 한줄이 각각 Transaction처리가 되고 각각 커밋 된다.
REQUIRES_NEW : 트랜잭션이 존재하는 경우 해당 트랜잭션을 잠시 보류시키고, 신규 트랜잭션을 생성합니다.
- 서로 완전히 독립적인 트랜젝션을 생성한다.
NESTED : 트랜잭션이 존재할 경우 중첩된 트랜잭션(nested)을 생성하여 처리를 수행하고, 존재하지 않을 경우는 Required와 동일하게 동작합니다. 즉, 생성해서 사용한다.
- 종속적인 하위 트랜젝션이 생기지만 상위 트렌잭션에 영향을 주지 않는다.
SUPPORTS : 트랜잭션이 존재할 경우 해당 트랜잭션을 사용하고, 존재하지 않을 경우는 트랜잭션을 사용하지 않습니다.
- 있으면 쓰고 없으면 안쓰겠다.
NOT_SUPPORTED : 트랜잭션이 존재할 경우 잠시 보류시키고, 트랜잭션이 없는 상태로 처리를 수행합니다.
- 있어도 없는거 처럼 없으면 없음.
MANDATORY : 트랜잭션이 존재할 경우 해당 트랜잭션을 이용하며, 존재하지 않을 경우 예외를 발생시킵니다.
-필수적으로 트랜젝션이 있어야한다.