inflearn logo
강의

講義

知識共有

実践!Spring Data JPA

@Transaction 과 관련된 질문입니다~

解決済みの質問

228

soollung

投稿した質問数 9

0

안녕하세요 강의 잘 듣고 있습니다

문의가 있어서 질문 드립니다

 특정메소드에서 @Transactional(propagation = Propagation.REQUIRES_NEW) 라는 옵션이 있습니다. 

기존 트랜잭션에 영향을 받지 않는 신규 트랜잭션이 발생되는것이라고 알고 있는데

주입받은 entityManager 객체를 활용하여 저장하고자 하는 객체 persist() 를 수행하고 메소드가 종료되었을때

insert 쿼리가 발생할줄 알았는데..

부모 트랜잭션이 종료가 되서야 반영이 되네요. 

이를 해결할수 있는 방안이 있을까요?

JPA java spring-boot spring

回答 3

1

soollung

답변 감사합니다 :)

1

yh

 확인을 해보았습니다.

스프링의 트랜잭션은 프록시 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

yh

안녕하세요. soollung님

제 생각에는 정상 동작해야 하는데 뭔가 꼬인 것 같아요.

현재 상황을 재현할 수 있는, 완전히 새로운 예제 프로젝트를 하나 만들어주세요.

전체 프로젝트를 압축해서 올려주세요.

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

66

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

103

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

68

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

69

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

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

144

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

144

2

동적 테이블에 대한 질문

0

84

1

영속성 전이와 연관관계

0

129

2

강의 10:25 질문

0

72

1

단건 update 질문

0

94

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

117

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

135

1