준영속상태의 엔티티를 변경할 때 변경감지와 merge()
준영속 상태의 엔티티를 업데이트할때, 두 가지 방법이 존재한다. 여기서 준영속 상태의 엔티티란 예전에 영속성 상태가 되었고 DB에 저장되었던 식별자가 존재하는 엔티티이지만 현재 영속성 상태가 아닌 상태를 말한다. 변경감지 변경감지는 flush 시점에 영속성 컨텍스트가 관리하는 엔티티의 변경 내용을 체크하여 알아서 SQL 쿼리 생성 및 DB에 전달하는 기능이다. 변경감지 프로세스에 대해 정리를 해보면.. 엔티티가 영속 상태가 된다.(persist나 find하여 DB에서 가져오는 경우) 영속성 컨텍스트는 스냅샷을 찍어 초기 상태를 저장해둔다. 엔티티의 필드에 값이 변경된다. 그리고 flush()가 호출된다.(커밋 시점이나 강제 flush) 영속성 컨텍스트는 스냅샷의 상태와 현재 상태가 다른(변경된) 데이터를..
2021.01.29