@Transaction 과 관련된 질문입니다~
안녕하세요 강의 잘 듣고 있습니다
문의가 있어서 질문 드립니다
특정메소드에서 @Transactional(propagation = Propagation.REQUIRES_NEW) 라는 옵션이 있습니다.
기존 트랜잭션에 영향을 받지 않는 신규 트랜잭션이 발생되는것이라고 알고 있는데
주입받은 entityManager 객체를 활용하여 저장하고자 하는 객체 persist() 를 수행하고 메소드가 종료되었을때
insert 쿼리가 발생할줄 알았는데..
부모 트랜잭션이 종료가 되서야 반영이 되네요.
이를 해결할수 있는 방안이 있을까요?
Câu trả lời 3
1
확인을 해보았습니다.
스프링의 트랜잭션은 프록시 AOP 방식으로 동작합니다.
따라서 같은 클래스 안에서 같은 메서드를 호출하면 AOP가 동작하지 않습니다.
원본 코드
@Transactional
@Repository
public class BaseRepo {
final EntityManager em;
public BaseRepo(EntityManager em) {
this.em = em;
}
public void save(School school){
em.persist(school);
}
/**
* 부모 트랜잭션 시작
* @param school1
* @param school2
*/
public void savePairSchool(School school1, School school2){
em.persist(school1);
saveChildSchoolWithOtherTx(school2);
}
/**
* 자식 트랜잭션(신규) 시작
* - 예상처럼 신규 tx 가 동작되지 않고 기존 tx에 합류?
* @param school
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveChildSchoolWithOtherTx(School school){
em.persist(school);
}
}
여러가지 해결방안이 있지만 가장 확실한 방법은 별도의 리포지토리를 만드시고, 그쪽으로 다음 로직을 이동시키면 됩니다.
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveChildSchoolWithOtherTx(School school){
em.persist(school);
}
그리고 새로만든 리포지토리를 주입 받으신 다음에 다음과 같이 호출하면 됩니다.
baseRepo2.saveChildSchoolWithOtherTx(school);
감사합니다.
0
안녕하세요. soollung님
제 생각에는 정상 동작해야 하는데 뭔가 꼬인 것 같아요.
현재 상황을 재현할 수 있는, 완전히 새로운 예제 프로젝트를 하나 만들어주세요.
전체 프로젝트를 압축해서 올려주세요.
감사합니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
65
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
101
3
MemberRepository 구현체
0
56
1
pdf 표현 질문드립니다.
0
60
1
로그가 남지 않는 문제.
0
79
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
68
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
69
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
90
2
Sort 인터페이스는 잘 사용 안하나요?
0
51
1
스캔대상 질문드립니다.
0
45
1
하이버네이트6에서의 최적화에 이은 질문
0
82
1
save() vs saveAndFlush DB 통신 횟수
0
51
1
순수 JPA 리포지토리 코드 수정부분
0
85
2
bulk연산 후 flush하는 이유를 모르겠어요
0
148
3
bulk insert 질문입니다.
0
174
2
교만했던 것 같아요.
0
143
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
144
2
동적 테이블에 대한 질문
0
84
1
영속성 전이와 연관관계
0
129
2
강의 10:25 질문
0
72
1
단건 update 질문
0
94
2
엔티티 와 도메인의 경계
0
125
1
UsernameOnlyDto 타입 type mismatch 오류
0
115
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
131
1

