JPA saveAndFlush 이후 QueryDSL 조회에 관한 질문드려요.
257
작성한 질문수 2
@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에 반영되는 것으로 알고있었는데... 아닌가요?
선배님들의 조언 부탁드립니다 ㅠ
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대해 답변드리겠습니다.
saveAndFlush 메소드는 JpaRepository 인터페이스에서 제공하는 메소드입니다. 이 메소드는 엔티티를 저장하고 즉시 flush를 수행함으로써 영속성 컨텍스트의 변경 사항을 데이터베이스에 반영하도록 설계되어 있습니다. 즉, saveAndFlush 호출이 성공적으로 완료된 후에는 영속성 컨텍스트와 데이터베이스 간의 동기화가 이루어져야 합니다.
그럼에도 불구하고 조회 쿼리를 수행했을 때 결과가 없다면 몇 가지 점검해볼 필요가 있습니다.
트랜잭션이 잘못 관리되고 있는지 확인:
@Transactional어노테이션이 메소드 레벨에서 적절하게 사용되고 있는지 확인해야 합니다. 트랜잭션 경계가 잘못 설정되어 있으면 예상치 못한 동작이 발생할 수 있습니다.Flush 모드 설정 문제:
EntityManager의 flush 모드 설정이 영속성 컨텍스트의 변경 내용을 데이터베이스에 적절히 반영하지 못하고 있는지 확인합니다.캐싱 이슈: 레벨 2 캐시가 활성화되어 있고, 캐시가 이전 상태를 반환하고 있는지 확인합니다.
QueryDSL 쿼리 동작 이슈: QueryDSL 쿼리가 올바르게 작성되었는지 확인하고, 필요하다면 JPQL이나 SQL로 조회가 정상적으로 이루어지는지 테스트해 볼 수 있습니다.
영속성 컨텍스트와 데이터베이스 간의 동기화 문제가 의심된다면, 동기화 작업을 명시적으로 호출하는 방법도 있습니다. 예를 들어 EntityManager를 주입받아 flush() 메소드를 직접 호출할 수 있습니다. 이렇게 하면 영속성 컨텍스트의 변경 내용이 즉시 데이터베이스에 반영될 것입니다.
이러한 검토 후에도 문제가 해결되지 않는다면, 정확한 원인 분석을 위해 관련 로그나 추가 정보가 필요할 수 있습니다.
참고로 Spring Data JPA의 주요 문서를 확인하고자 한다면, Spring Data JPA Reference Documentation을 참조하시면 도움이 될 수 있습니다. 아래 링크도 참고하시기 바랍니다.
- Spring Data JPA Reference Documentation URL: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
도움이 필요하시면 추가적인 질문을 통해 구체적인 상황을 설명해주시기 바랍니다.
Inner class로 Config를 지정하는 이유
0
29
1
Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.
0
47
2
테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.
0
32
1
리뉴얼 시기
0
51
2
JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문
0
55
3
설계 트레이드 오프 링크 접속 안됨
0
85
2
테스트 질문, 어떤것을 사용할것인것에 대해서
0
46
1
service-discovery 프로세스 가동 이유
0
51
1
트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?
0
47
1
헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.
0
132
2
h2 database
2
59
2
Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?
0
116
2
Querydsl 설정 할때 - run and test 다르게 설정 할때? 질문
0
60
1
new 패키지명.Dto명 생략가능
0
74
2
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
72
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
65
1
SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류
0
64
1
aws 관련 질문드립니다.
1
69
3
setter 사용하지 않기
0
61
1
세션을 제대로 이해한게 맞는지 궁금합니다
0
57
1
안녕하세요 토비님 혹시 완성된 코드의 repository 주소는 없을까요?
0
127
2
자막 오타 제보
0
54
1
rabbitmq에 configservice 연결에 대해 질문있습니다.
0
65
1
안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..
0
74
2





