🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

준영속 상태로 만들기

24.05.20 04:52 작성 24.05.20 04:57 수정 조회수 85

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

codesweaver님의 프로필

codesweaver

2024.05.20

안녕하세요. WOOKI님, 공식 서포터즈 코즈위버입니다.

detach() 를 하여 해당 엔티티를 영속성 컨텍스트에서 제거할 때, 관련 스냅샷, 쿼리 등을 모두 삭제합니다.

그래서 업데이트 쿼리가 발생하지 않습니다. 🙂

감사합니다.

채널톡 아이콘