[JPA] 변경감지와 병합

Harry park·2022년 6월 27일
0

JPA

목록 보기
8/8
post-thumbnail

변경감지와 병합

변경감지병합준영속 엔티티가 가지는 문제점 때문에 사용되는 방법이다.
📍 문제점 준영속 엔티티는 영속성 컨텍스트가 관리하지 않는다.

변경감지

@Transactional
public void updateItem(Long itemId, Book param) {
	// 영속 상태의 Entity 조회
    Item findItem = itemRepository.findOne(itemId);
    // 변경 감지(더티체킹)
    findItem.setName(param.getName());
    ...
}

영속성 컨텍스트는 변경된 사항만 감지하여, flush()를 날려준다.
이 때, insert가 아닌 수정 항목만 변경하는 update sql을 날린다.

병합

...
private final EntityManager em;
...

@Transactional
public void updateItem(Item param) {
	Item mergedItem = em.merge(param);
}

mergedItem는 영속성을 가지게 된다.
🚨 mergenull도 모두 update하게 되므로 사용에 주의해야한다.
(모든 필드를 update함)

권장 사용

사용에 번거롭더라도 변경감지를 사용하는 것이 좋다.
또한, 생성 메서드, 비즈니스 로직을 두어 setter의 무분별한 사용을 자제하고, 응집력을 높이는 것이 좋다.


참고사이트

velog - hope1213님 블로그


개인적으로 공부하며 기록한 내용으로, 틀린 내용이 있는 경우 덧글을 달아주시면 감사하겠습니다. 😍

profile
Jr. Backend Engineer

0개의 댓글