본문으로 바로가기

[JPA] 변경 감지와 병합

category 언어/SpringBoot 2021. 9. 16. 16:10
728x90

준영속 엔티티란?

- 영속성 컨텍스트가 더는 관리하지 않는 엔티티 

- DB에 한번 저장되었기에 식별자가 존재하지 않아

  JPA가 변경감지를 하지 않아 수정을 하여도 DB에 업데이트가 일어나지 않음

 

 

준영속 엔티티를 수정하는 방법

 

1. 변경 감지 기능 사용

2. 병합(merge) 사용

 

1. 변경감지 기능사용 (=Dirty Checking)

-> 리파지토리에서 id를 기반으로 하여 데이터를 찾은 후, 값을 수정하는 방식이다.

-> @Transactional에 의해 save 필요없이 커밋을 통해 변경감지하여 변경된 내용을 flush 한다.

 

 

2. 병합(merge) 사용

-> 객체를 생성한 뒤, save 하는 시점에 위와 같이 merge()를 해준다.

 

merge의 단점

- 해당 모든 값들을 업데이트 하기 때문에 값이 세팅되지 않으면 null이 된다.

- 예를 들면, 위에서 Price라는 정보만 변경하고 싶다고, Price의 값만 업데이트 하면 나머지 값들이 null로 세팅된다.

 

출처 : ORM 표준 프로그래밍

728x90