Hansel
스프링부트 기초 / 변경 감지와 병합 본문
변경 감지와 병합

두 메서드를 보면 우선 setter를 남발하고 있다.

updateItem 메서드 내부의 laptop 객체는 id(pk)가 있으니 리포지토리에서 else문을 타게 될것이다.
그럼 merge를 호출하게 되는데 이것의 문제점이 무엇인지 알아보자.
1. merge(병합)
merge 방식은 파라미터로 넘겨 받은 데이터로 기존의 데이터를 바꿔치기 한다.
병합을 사용하면 모든 속성이 변경되기 때문에 병합 시 null이면 기존에 값이 있어도 null로 바뀐다
2. 변경 감지(dirty checking)
엔티티가 영속 상태면 값이 변경 되었을때 commit 시점에 db에 반영한다.
one.changeValues() 등의 메서드를 만들어서 setter를 대체해야한다.


결론
변경감지는 원하는 속성만 변경할 수 있다.
하지만 병합을 사용하면 모든 속성이 변경된다.
=> 안전성을 위해 변경감지를 사용하자.
'Spring > 기초' 카테고리의 다른 글
| 스프링 부트 / 야매 게시판 만들기 2 (0) | 2022.03.05 |
|---|---|
| 스프링 부트 / 야매 게시판 만들기 1 (0) | 2022.03.05 |
| 스프링부트 기초 / 웹 계층 개발2 (0) | 2022.02.21 |
| 스프링부트 기초 / 웹 계층 개발 (0) | 2022.02.21 |
| 스프링부트 기초 / 도메인 설정 2 (0) | 2022.02.21 |