JPA/영속성 컨텍스트
변경 감지 기능(Dirty Checking)과 병합 (merge)
수달하나
2021. 7. 7. 21:32
준영속 엔티티를 수정하는 2가지 방법
준영속 엔티티: 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 의미.
- 변경 감지 기능 사용(Dirty Checking)
트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택하고 수정한다. 이후 트랜잭션 commit 시점에 변경 감지 기능(Dirty Checking)이 동작해서 JPA가 자동으로 데이터 베이스에 UPDATE 쿼리를 날려준다.
- 병합(merge) 사용
merge 함수 호출을 통해 값을 변경
: 준영속 엔티티의 식별자 값으로 영속 엔티티를 조회한후 영속 엔티티의 값을 준영속 엔티티의 값으로 모두 교체한다. 이후 트랜잭션 commit 시점에 변경 감지 기능이 동작해서 데이터베이스에 UPDATE 쿼리를 날려준다.
변경 감지 기능과의 차이점으로 인한 단점 → 부분수정이 불가능하기 때문에 등록되지 않은 값들은 null값으로 변경된다.
결론 : 변경감지 기능을 사용하는 것이 옳다.