Skip to main content

4. 변경 감지와 병합

·122 words·1 min· loading
Table of Contents

원래 웹 계층 개발이지만, 딱히 쓸 게 없다

준영속 엔티티 수정
#

준영속 엔티티란 <- 영속성 컨텍스트가 더이상 관리하지 않는 엔티티

  • JPA 엔티티는 변경을 자동으로 감지해서 UPDATE를 날라지만,
    준영속 엔티티는 (예: DB에서 꺼내지 않고, 임의로 만듬)UPDATE를 날리지 않음
  • 따라서, 업데이트를 하려면 아래의 두가지 방법을 쓸 수 있다. 근데 무조건 첫번째를 쓰자

변경감지 기능 (무조건 이거씀)
#

DB에서 다시 엔티티를 조회하고, 그 엔티티를 수정하는 방법

트랜잭션 커밋 시점에 변경이 감지되어, UPDATE문이 날라감

☠️ 병합 ☠️
#

알아만 두자

merge()를 실행해서 덮어씌움

조회-> 교체 => 커밋시점에 UPDATE문 날림


왜 ?
#

병합(merge)시에는, 모든 필드를 덮어씌우고, 없다면 NULL로 업데이트한다.

모든 화면에서 항상 모든 필드값을 유지하기 싫으면, 쓰지말자

이전에 Mybatis <if test="someCondition != null and someCondition != ''"> 없이 UPDATE를 날렸다가, 필드가 NULL로 초기화된 경험이 생각난다.