본문 바로가기
개발/JPA

[JPA] 변경감지와 병합(merge)

by Allonsy 2022. 10. 26.
반응형

준영속 엔티티

식별자가 존재하지만 영속성 컨텍스트가 더는 관리하지 않는 엔티티

- JPA가 관리하지 않는다

- 변경감지가 일어나지 않는다

 

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

1. 변경 감지 기능 사용

1) id 식별자를 이용해서 기존 entity를 조회

2) 조회한 엔티티는 영속성 컨텍스트에서 관리됨

3) 조회한 엔티티에 setter를 이용해서 값을 넣어주면 트랜잭션 커밋 시점에 flush를 날리면서 변경 감지 작동

 

2. 병합(merge) 사용

em.merge(item);

JPA가 준영속 엔티티의 식별자 값으로 영속성 컨텍스트에서 entity를 찾고 없으면 DB에서 조회 후 모든 필드를 바꿔줌

(1번에 적어놓은 과정을 모두 JPA가 알아서 해줌)

주의! 병합을 쓸 경우 모든 필드를 교체

 

[꿀팁 번외편]

데이터를 바꿀 때 setter를 사용하기 보다는 의미있는 메서드를 만든 후 메서드를 이용해서 바꾸자(추적, 유지보수 용이)

setName, setAge : X

change(name, age) : O

 

 

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의를 들으며 정리한 내용입니다 :)

반응형

댓글