영속성 컨텍스트가 더는 관리하지 않는 엔티티
임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.
준영속 엔티티의 문제: JPA가 관리를 안함, 변경을 해도 update가 안됨
❓❓그렇다면 어떻게 준영속 엔티티를 관리할 수 있을까??
변경 감지 기능 사용
병합(merge) 사용
Merge 병합
public void save(Item item){ if (item.getId()==null){ em.persist(item); } else{ Item merge=em.merge(item); } }
Item merge=em.merge(item);
Item merge가 영속성 컨텍스트로 관리, item은 X
변경 감지 기능을 사용하면 원하는 속상만 선택해서 변경할 수 있지만, 병합을 사용하면 모든 속성이 변경된다.
병합시 값이 없으면 null
로 업데이트 할 위험이 있다.(병합은 모든 필드를 교체한다)
실무에서는 보통 변경가능한 데이터만 노출하기 때문에, 병합을 사용하는 것이 더 번거롭다.
✖️추가
변경감지 기능을 사용할 때 setter를 사용하면 추적하기 어렵다.
setter 보다는 의미있는 메서드를 사용하여 변경을 확실하게 알 수 있게 하자!