강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Dale McWood님의 프로필 이미지
Dale McWood

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

플러시

@Transactional Propagation 문제

작성

·

278

1

안녕하세요.

 

JPA로 개발을 하던 도중 궁금한 점이 있어서 질문 드립니다.

 

A 메소드와 B 메소드가 있는데 A 메소드는 propagation이 디폴트인 REQUIRED 이고 B 메소드는 REQUIRES_NEW 입니다.

 

A 메소드에서 B 메소드를 호출하면 INSERT 가 한번 호출되야 하는데 두 번 호출되고,

 

값도 두 개가 들어가게 됩니다.

 

둘 다 디폴트인 REQUIRED로 바꾸면 정상 작동 하구요.

 

혹시 이 부분은 Isolation과 관계가 있는 문제인가요?

아니면 commit이 두번 일어나서 그런가요?

 

 

퀴즈

JPA에서 영속성 컨텍스트는 어떤 역할을 하는 핵심 개념일까요?

객체와 테이블의 매핑 정보 정의

엔티티를 관리하고 DB와 동기화하는 환경 제공

SQL 쿼리 직접 작성 및 실행

데이터베이스 연결 풀 관리

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Dale McWood님

REQUIRES_NEW를 사용하게 되면 완전히 다른 트랜잭션에서 동작합니다.

스프링은 트랜잭션과 영속성 컨텍스트를 1:1로 맞추기 맞습니다. 따라서 REQUIRES_NEW를 사용하면 트랜잭션도 달라지지만 영속성 컨텍스트도 별도로 만들어집니다.

REQUIRES_NEW를 사용할 때는 이런 부분을 충분히 고려해서 사용해야 합니다.

감사합니다.

Dale McWood님의 프로필 이미지
Dale McWood
질문자

감사합니다. 이해가 됬습니다!

Dale McWood님의 프로필 이미지
Dale McWood

작성한 질문수

질문하기