혹시 이 부분은 강의 찍을 때와는 다르게 현재 바뀐 걸까요?
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
// flush 자동 호출 commit, query
int resultCnt = em.createQuery("update Member m set m.age = 20")
.executeUpdate();
Member findMember = em.find(Member.class, member1.getId());
System.out.println("findMember.getAge() = " + findMember.getAge());
이 부분을 보시면 영한님의 12분 코드와 같잖아요?
이때 Member findMember = em.find(Member.class, member1.getId()); 의 findember를 출력할 때, 영속성 컨텍스트 때문에 update문의 age가 20인 것이 반영이 안 돼야 하는데 제 환경에서는 반영이 되는 걸로 나옵니다..!
정리하면, em.clear() 를 하지 않았을 때는 age가 0이 나와야 하지만, em.clear() 를 하지 않았음에도 불구하고 age가 20이 나옵니다
물론 아래처럼 member의 age 초기값을 0으로 지정해줬습니다
Member member1 = new Member();
member1.setUsername("회원1");
member1.setAge(0);
member1.changeTeam(teamA);
em.persist(member1);
이유가 무엇일까요??
답변 1
1
안녕하세요, 인프런 AI 인턴입니다. Sully님.
질문하신 내용을 보니 벌크 연산 후 영속성 컨텍스트에 변화가 있는 경우와 관련된 혼란이 있는 것 같네요. 해당 내용에 대한 답변으로 비슷한 질문과 해결 방법들이 있는 게시물을 안내드리겠습니다.
아래 링크들을 참고하여 문제 해결에 도움이 되었으면 좋겠습니다:
벌크 연산 11:09 em.clear()를 하지 않았는데…..
- 이 게시물에서는 영속성 컨텍스트 초기화와 벌크 연산 후의 상태에 대해 설명하고 있습니다.
- 이 게시물에서는 영속성 컨텍스트 초기화와 벌크 연산 후의 상태에 대해 설명하고 있습니다.
-
- 여기서는 flush와 commit의 차이점과 역할에 대해 설명하고 있어 도움이 될 수 있습니다.
- 여기서는 flush와 commit의 차이점과 역할에 대해 설명하고 있어 도움이 될 수 있습니다.
-
- 벌크 연산 후 select 쿼리의 동작 방식에 대한 내용이고, 웬디님 질문과 유사한 상황을 다룹니다.
- 벌크 연산 후 select 쿼리의 동작 방식에 대한 내용이고, 웬디님 질문과 유사한 상황을 다룹니다.
-
- 벌크 연산 후 영속성 컨텍스트 초기화에 대한 내용입니다.
- 벌크 연산 후 영속성 컨텍스트 초기화에 대한 내용입니다.
간단한 요약 설명:
- 벌크 연산은 영속성 컨텍스트를 무시하고 직접 데이터베이스에 쿼리를 실행합니다.
- em.clear()를 호출하지 않으면 영속성 컨텍스트의 캐시가 남아 있어 데이터베이스의 최신 상태가 반영되지 않을 수 있습니다.
- 따라서 벌크 연산 후에는 em.clear()를 호출하여 영속성 컨텍스트를 초기화한 후 다시 불러오는 것이 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
6
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
20
1
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
65
2
inheritance startegy 선택시 고려사항
0
45
1
Entity 동등성 비교
0
51
1
실무 조언 관련 질문입니다.
0
74
1
H2데이터베이스 파일 생성
0
83
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
71
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
68
1
JPQL 메소드와 락
0
64
1
Delivery @OneToOne
0
77
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
107
2
UnsupportedOperationException 발생
0
112
3
H2 Database 연결이 안됩니다.
0
106
2
연관관계 매핑 질문드립니다.
0
104
2
h2데이터베이스 실행오류
0
123
2
persistence.xml
0
132
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
96
1
영속성 컨텍스트
0
82
1
JPA 프록시
0
112
1
Native Query와 MyBatis
0
88
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
108
1
임베디드 타입 예시 코드 관련 질문
0
134
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
106
3





