← 질문 목록
#136깊이 0

수정 메서드 없이 UPDATE가 나가는 이유는?

프레임워크기초트랜잭션

영속성 컨텍스트가 관리 엔티티의 최초 상태와 현재 상태를 flush 때 비교하기 때문이다. 달라진 속성이 있으면 UPDATE SQL을 만든다.

  1. 조회컨텍스트

    엔티티와 최초 상태를 둔다

  2. 코드엔티티

    필드를 바꾼다

  3. 커밋flush

    최초 상태와 비교한다

  4. flushDB

    차이가 있으면 UPDATE한다

flush는 커밋 직전이나 쿼리 실행 전에 일어날 수 있다. SQL이 보였다는 사실과 커밋됐다는 사실은 다르며 롤백하면 변경은 사라진다.

관리 상태인 엔티티만 대상이다. detach나 clear 뒤의 객체는 바꿔도 감지되지 않는다. merge는 전달 객체가 아니라 반환된 관리 객체를 갱신한다.

벌크 UPDATE는 영속성 컨텍스트를 건너뛴다. 이미 관리 중인 객체가 낡을 수 있어 flush 후 clear하거나 다시 조회하는 전략이 필요하다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

수정 메서드 없이 UPDATE가 나가는 이유는?