해결된 질문
작성
·
142
·
수정됨
0
[질문 템플릿]
1. 예
2. 예
3. 예
[질문 내용]
Member member = em.find(Member.class, 150L);
member.setName("AAAAA");
em.detach(member);
tx.commit();
이 코드에서 setName에서 영속성 컨텍스트에 있는 member에 수정이 발생했고, 이를 스냅샷과 비교하여 dirty checking을 합니다. UPDATE 쿼리는 쓰기 지연 SQL 저장소에 저장됩니다.
위 과정이 모두 끝난 이후에 detach를 하더라도 UPDATE 쿼리는 쓰기 지연 SQL 저장소에 있을텐데, UPDATE 쿼리가 나가지 않는 이유는 flush할 때 영속성 컨텍스트에서 관리하는 엔티티가 아닌데 생성된 쿼리는 거르고 DB로 날리는 메커니즘으로 작동하는 건가요?
답변 1
1
안녕하세요. WOOKI님, 공식 서포터즈 코즈위버입니다.
detach() 를 하여 해당 엔티티를 영속성 컨텍스트에서 제거할 때, 관련 스냅샷, 쿼리 등을 모두 삭제합니다.
그래서 업데이트 쿼리가 발생하지 않습니다. 🙂
감사합니다.