기본적으로 자세한것 우선
내부 호출에는 적용 안됨
class ~~
public one () {
two();
}
@Transactional
public two() {
sout~
}
이런상황에서 two();는 this.two()가 생략된것 즉 this = 자신의 인스턴스 본체 = 프록시 객체가 아닌 진짜너셕을 호출한다는 뜻
해결법은 클래스 나누기
의존관계주입, 생성자 직후 @Postconstruce의 동작은 @Transcational은 적용이 안됨 트랜잭션 프록시등의 기능이 더 나중에 실행되서 안됨
트랜잭션은 커밋 롤백을 위한 틀이기도 하기에 어떤 상황에서 무엇을 선택할지 옵션등 여러가지 있음 readonly사용하면 어디부분에서 최적화 되는지도 설명
런타임 예외는 롤백하지만 체크예외는 커밋함 이유는 개발자들이 체크예외는 시스템상의 문제가 아니고 예를 들어 사용자가 잘못한 상황에서 일단 값을 저장하고 다른 안내를 하는등의 방향으로 사용가능 그래서 커밋이 기본값
트랜잭션 안에서 다시 트랜잭션이 시작할경우 그냥 가장 밖의 트랜잭션에 함께가게됨 즉 가장 밖의 시작-커밋 이렇게 한번만 묶어서 들어가는것
내부 트랜잭션에서 REQUIRES_NEW설정을 해주면 얘는 아에 따로 새로운 커넥션 가져와서 완전히 별개로 작동가능
그외에 옵션들 몇개더있