변경 감지와 병합의 차이점

tyghu77·2023년 7월 7일
0

준영속 엔티티

영속성 컨텍스트가 더이상 관리하지 않는 엔티티를 말한다.
임의로 만들어낸 엔티티도 DB에 한번 갔다와서, 식별자가 DB에 있는 상태이면 준영속 엔티티로 볼 수 있다.

준영속 엔티티의 문제점

JPA가 관리를 안한다. > 변경되어도 더티체킹이 되지 않아서 DB에 업데이트가 되지 않는다.

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

  1. 변경 감지(권장)
  2. merge 사용
    merge는 준영속 상태의 엔티티를 영속 상태로 변경할 때 사용하는 기능이다.
    주의점
    변경 감지를 사용할 경우 원하는 속성만 변경할 수 있지만 병합을 사용하면 모든 속성이 변경된다. 병합할 때 값이 없으면 null로 업데이트 될 수 있기 때문에 조심해야한다.

merge를 쓰지 않고 변경 감지를 사용하는 것이 좋다.
컨트롤러에서 어설프게 엔티티를 생성하지말고 트랜잭션이 있는 서비스계층에서 dto를 만들어서 데이터를 전달해야한다.
트랜잭션이 있는 서비스 계층에서 영속 상태의 엔티티를 조회하고 엔티티 데이터를 직접 변경한다, 그러면 트랜잭션 커밋 시점에 변경 감지가 실행된다.

profile
배운것을 기록하자

0개의 댓글