Spring

Entity를 변경하는 방법(Merge와 변경감지)

yougeun 2023. 4. 7. 00:15
728x90

Merge 동작 방식

1. 파라미터로 넘어온 준영속 엔티티의 식별자 값으로 1차 캐시에서 엔티티를 조회한다.
1-1. 만약 1차 캐시에 엔티티가 없으면 데이터베이스에서 엔티티를 조회하고, 1차 캐시에 저장한다.
2. 조회한 영속 엔티티에 member 엔티티의 값을 채워 넣는다.
3. 영속 상태인 mergeMember를 반환한다.

4.트랜젝션 커밋 시점에 변경 감지 기능이 동작해서 데이터베이스에 UPDATE SQL이 실행된다.

Merge와 변경감지의 차이점

변경감지를 이용하면 원하는 속성만 선택해서 변경 할 수 있지만 ,병합을 사용하면 모든 속성이 변경되므로 병합시 값이 없으면 null로 업데이트 할 위험이 있다.엔티티를 변경할때는 무조건 변경감지를 이용해야 한다.

 

Entity 변경 시 주의점

(1)컨트롤러에서 엔티티를  어설프게 생성하지 말아야한다.

(2)트랜젝션이 있는 서비스 계층에 식별자(id)와 데이터를 명확하게 전달해야 한다.(파라미터 or dto)

 

(3)트랜젝션이 있는 서비스 계층에 영속 상태의 엔티티를 조회하고 ,엔티티의 데이터를 직접 변경해야 한다.

 

728x90