saveAndFlush 저장후 QueryDsl 조회 문의
364
작성한 질문수 9
@Transactional
public AccessTokenResponse signup(MemberRequest request) {
Member member = request.toMember(passwordEncoder);
MemberDetails memberDetails = memberRepository
.findMemberDetailsByMemberId(memberRepository.saveAndFlush(member).getId())
.orElseThrow(RuntimeException::new);맨아래서, 2번째 줄에서 member의 정보를 DB에 저장합니다.
: saveAndFlush 이용그리고 나서 QueryDSL로 작성된 findMemberDetailsByMemberId 으로 해당 멤버의 정보를 조회해 왔습니다.
: 그러나, 해당 쿼리로는 조회된 값이 없어 null 이 반환되었습니다.
확인해보니, saveAndFlush를 통해 해당 멤버의 정보가 즉각 DB에 반영되지 않아서 QueryDSL 로된 쿼리로 해당 멤버의 정보가 조회되지 않은 것인데요.
제가 알기로 saveAndFlush를 이용하면 즉각 DB에 반영되는 것으로 알고있었는데... 아닌가요?
이런 경우 어떤 방법으로 해결할 수 있을지 조언 주시면 감사하겠습니다!
(member 정보 저장 후, querydsl로 조회해올 수 있는 방법)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문 내용을 바탕으로 saveAndFlush 메소드의 작동 방식에 대해 설명드리겠습니다.
saveAndFlush메소드는CrudRepository인터페이스에 정의된save메소드와 유사하게 엔티티를 저장하는 역할을 합니다. 차이점은saveAndFlush가 실행될 때 JPA의EntityManager를 이용해 즉시 DB에 반영(flush) 하도록 만듭니다. 즉, 이 메소드는 엔티티를 DB에 저장하고, 해당 세션 내에 존재하는 모든 변경 사항을 데이터베이스에 동기화하는 작업을 수행합니다.saveAndFlush호출 이후 QueryDSL를 사용한 조회에서 null을 반환 받는 경우, 다음과 같은 원인을 고려할 수 있습니다:- 트랜잭션 범위 설정이 잘못되어 있을 수 있습니다. 해당 메소드가 실행되는 동안에는 하나의 트랜잭션 범위 안에 있어야 합니다.
- 데이터베이스의 transaction isolation level에 따라 즉시 반영된 변경 사항이 조회되지 않을 수 있습니다. 보다 낮은 isolation level에서는 ‘dirty read’가 발생하지 않습니다.
- JPA 구현체나 JPA Provider, 데이터베이스의 잠금 메커니즘이 원인일 수 있으므로, 이들의 설정을 확인해볼 필요가 있습니다.
- 트랜잭션 범위 설정이 잘못되어 있을 수 있습니다. 해당 메소드가 실행되는 동안에는 하나의 트랜잭션 범위 안에 있어야 합니다.
이 경우 해결 방법으로, 먼저 메소드가 알맞은 트랜잭션 범위에서 실행되는지 확인하십시오. 그리고 트랜잭션 isolation level을 적절히 설정하거나 JPA의 구현체 및 데이터베이스 설정에 문제가 없는지 검토합니다.
더 자세한 내용이 필요하시면 Spring Data JPA 문서의 ‘Persisting Entities’ 섹션과 ‘Transactional query methods’ 섹션을 참조하시면 도움이 될 것입니다.
Persisting Entities 문서 원문:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence
Transactional query methods 문서 원문:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactional-query-methods
도움이 되셨기를 바랍니다. 추가적인 질문이 있으시면 언제든지 문의해 주세요.
Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.
0
32
2
테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.
0
22
1
리뉴얼 시기
0
39
2
JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문
0
50
3
설계 트레이드 오프 링크 접속 안됨
0
82
2
테스트 질문, 어떤것을 사용할것인것에 대해서
0
40
1
service-discovery 프로세스 가동 이유
0
45
1
트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?
0
43
1
헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.
0
125
2
h2 database
2
53
2
Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?
0
109
2
Querydsl 설정 할때 - run and test 다르게 설정 할때? 질문
0
56
1
new 패키지명.Dto명 생략가능
0
68
2
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
64
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
59
1
SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류
0
62
1
aws 관련 질문드립니다.
1
62
3
setter 사용하지 않기
0
55
1
세션을 제대로 이해한게 맞는지 궁금합니다
0
54
1
안녕하세요 토비님 혹시 완성된 코드의 repository 주소는 없을까요?
0
119
2
자막 오타 제보
0
47
1
rabbitmq에 configservice 연결에 대해 질문있습니다.
0
62
1
안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..
0
68
2
join에대해 질문드립니다.
0
46
1





