inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

벌크성 수정 쿼리

flush() 와 clear()

해결된 질문

467

최재영

작성한 질문수 24

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
1. 스프링 데이터 JPA 가 지원하는 save를 호출하면 flush()가 나가는건가요 아니면 save를 하고 bulkAgePlus()를 호출하면서 bulkAgePlus() 에 있는 JQPL이 실행되서 flush() 가 나가는건가요 ?

 

  1. bulkAgePlus()를 실행하면 JPQL 실행이되고, JPQL 이 실행이 되면 flush() 가 호출이 되는데 이때 SQL쿼리문이 DB에 전송이대서 DB에는 업데이트가 되어있지만 영속성 컨텍스트는 업데이트가 안되기 때문에 clear()를 해주는게 맞는건가요 ?

java spring spring-boot jpa

답변 1

3

김영한

안녕하세요. 최재영님

스프링 데이터 JPA와 관련된 작업 흐름을 이해하는 것은 중요합니다. 여기서 언급된 save()bulkAgePlus() 메서드의 동작과 관련하여 JPA의 동작 방식을 설명하겠습니다.

1. save() 메서드 호출 시의 플러시 동작: 스프링 데이터 JPA의 save() 메서드를 호출할 때, 일반적으로는 즉시 flush()가 발생하지 않습니다. save() 메서드는 주로 엔티티를 영속성 컨텍스트에 저장하는 데 사용되며, 이후 트랜잭션이 커밋되거나 명시적으로 flush()를 호출할 때까지 데이터베이스에는 반영되지 않습니다.

2. bulkAgePlus()와 JPQL의 실행: bulkAgePlus() 내에서 JPQL(JPA Query Language)을 사용하는 벌크 연산을 실행하면, JPA는 이를 데이터베이스에 즉시 반영하기 위해 flush()를 호출합니다. 이는 벌크 연산이 영속성 컨텍스트를 무시하고 직접 데이터베이스에 적용되기 때문입니다.

3. 영속성 컨텍스트와 clear()의 필요성: 벌크 연산 후 clear()를 호출하는 것은 영속성 컨텍스트와 데이터베이스 간의 일관성을 유지하기 위해 중요합니다. 벌크 연산은 영속성 컨텍스트에 있는 엔티티 상태를 업데이트하지 않으므로, 데이터베이스에는 변경 사항이 반영되어 있지만 영속성 컨텍스트는 그 변경 사항을 모르는 상태가 됩니다. 따라서 clear()를 호출하여 영속성 컨텍스트를 초기화하고 필요한 경우 다시 로드해야 일관성을 유지할 수 있습니다.

결론적으로, save()를 호출한 후 bulkAgePlus()를 호출하면, bulkAgePlus() 내부에서 실행되는 JPQL이 flush()를 발생시키고, 벌크 연산 후 영속성 컨텍스트의 상태가 데이터베이스와 동기화되지 않으므로 clear()를 호출하는 것이 적절합니다.

감사합니다.

2

최재영

제가 예상했던게 헷갈려서 의구심이 생겼는데 이제 확실히 이해했습니다!

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

0

69

1

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

0

107

3

MemberRepository 구현체

0

57

1

pdf 표현 질문드립니다.

0

62

1

로그가 남지 않는 문제.

0

81

1

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

0

70

2

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

0

72

2

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

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

46

1

하이버네이트6에서의 최적화에 이은 질문

0

85

1

save() vs saveAndFlush DB 통신 횟수

0

53

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

152

3

bulk insert 질문입니다.

0

178

2

교만했던 것 같아요.

0

147

1

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

0

147

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

74

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

127

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

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

0

136

1