inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Lv2] Chinh phục JPA toàn diện dành cho lập trình viên thực tế - Từ persistence context đến các mẫu triển khai thực tiễn

2-3. 🚽 Flush: Đồng bộ hóa ngữ cảnh bền vững tại "thời điểm xả nước"

FlushModeType.COMMIT (12:45) 예시코드 질문

66

stillonmyway

4 câu hỏi đã được viết

0

안녕하세요,

FlushModeType.COMMIT에 대한 부작용으로 기재하신 예시코드 관련 질문 드립니다.

em.setFlushMode(FlushModeType.COMMIT);

// 1. 회원 A 저장
em.persist(new Member("회원A")); 

// 2. 회원 조회 (JPQL)
// 플러시가 안 일어남 -> DB에는 '회원A'가 없음 -> 조회 결과 0건
List<Member> list = 
    em.createQuery("select m from Member m where m.name = '회원A'", Member.class)
      .getResultList();

// 결과: 방금 저장했는데 조회가 안 되는 미스터리 발생 😱

만약 Member 엔티티 클래스의 ID 생성 전략이 IDENTITY인 경우

em.persist(new Member("회원A")); 에 의해 INSERT 쿼리가 실행되므로, 그 아래 코드에서는 해당 데이터가 조회되지 않나요?

데이터 불일치 문제가 발생할 수 있으니 COMMIT 모드는 확실한 이해 하에 사용하라는 것은 확실히 이해했습니다! 다만 예시코드 보다가 급 궁금해져서요ㅎㅎ

java spring spring-boot jpa spring-jpa

Câu trả lời 1

1

dingcodingco

안녕하세요 좋은 질문 감사합니다!

오 넵 말씀하신 대로 ID 생성 전략이 IDENTITY라면 em.persist(new Member("회원A")) 시점에 INSERT 쿼리가 바로 실행됩니다. 그래서 그 아래 JPQL 조회에서는 DB에 이미 데이터가 있으므로 조회가 됩니다!
강의 예시는 IDENTITY가 아닌 SEQUENCE 전략을 기준으로 설명한 것입니다. SEQUENCE 전략은 persist 시점에 ID만 먼저 가져오고 INSERT는 쓰기 지연 SQL 저장소에 쌓아두기 때문에, FlushModeType.COMMIT으로 플러시를 막아두면 JPQL 실행 전에 INSERT가 나가지 않아 조회 결과가 0건이 됩니다.
즉 IDENTITY 전략에서는 persist 자체가 즉시 INSERT를 유발하므로 COMMIT 모드의 부작용이 드러나지 않을 수 있습니다. 다만 IDENTITY여도 이후 변경 감지로 인한 UPDATE는 커밋 전까지 지연될 수 있으니, COMMIT 모드는 여전히 데이터 정합성 측면에서 주의가 필요할 것 같습니다!!! 깊은 질문 감사드립니다

재탕문제

0

17

1

재탕문제

0

16

0

지금 강의가 어려우신분 추천드립니다.

0

20

1

파이썬 추가 코드

0

29

1

getOrCreate / Unique? 멱등 처리 질문

1

43

2

기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.

0

40

2

파킹 페이지와 대기열 큐 질문입니다.

0

32

1

배열 포인터 출력 표시

0

45

1

포인터 증감 또는 값 증감

0

42

1

조회 메서드에서 @Transactional(readOnly=true) 질문

1

37

1

배열 포인터 함수 관련

0

39

1

"폴더를 찾을 수 없습니다." 라는 응답만 계속 나옵니다.

0

41

1

EmailSender 관련 문의

0

42

1

실기 이론 통합 요약본 버전

0

49

2

업캐스팅 3번 문제 예시

0

54

2

CRA ? 질문입니다

0

45

1

[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.

0

40

1

[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.

0

80

6

구글드라이브 접속 불가

0

48

2

2024년2회15~20

0

39

1

낙관적락 질문있습니다.

0

43

1

push pop 설명 되어있는 강의가 몇강인가요?

0

47

1

해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증

1

42

1

자막 오타 제보

0

74

1