14.엔티티 갱신
JPA에서는 별도의 Entity를 갱신하기 위한 API를 제공하지 않음
따라서 엔티티의 필드(데이터베이스 테이블의 컬럼)을 변경하기 위해서는 별도의 전략이 필요
1.Automatic Dirty Checking, 변경 감지
값을 변경하고자 하는 엔티티의 값을 Java 코드를 통해 변경 할 경우, 영속성 컨텍스트는 자동으로 변경을 감지함(Dirty Checking)
엔티티의 값을 변경하는 예시 코드
book.updateBookName("ABC"); // bookName을 ABC로 변경변경 감지 대상은 기존에 영속성 컨텍스트에 존재하던 엔티티로, 처음 영속화될 때 관리되던 대상
tx.commit()을 통해 flush()가 호출될 경우, 데이터베이스에 적용하기 전에 변경 감지가 먼저 수행됨
새롭게 변경된 엔티티(bookName: ABC) "← 변경 감지 →" 기존 엔티티(bookName: JPA)bookName이 다르기 때문에 해당 값을 수정하는 UPDATE 쿼리가 자동으로 생성되어 tx.commit()이 수행될 경우 생성된 UPDATE 쿼리가 데이터베이스에 전달되어 갱신 처리가 수행됨
1-2. tx.commit(flush()) 수행 전
tx.commit() 수행 전에는 영속성 컨텍스트에 bookName의 값을 새로운 값(“ABC”)으로 수정하기 이전 상태의 엔티티 스냅샷이 저장되어 있음

1-3. tx.commit(flush()) 수행 후
book.updateBookName(“ABC”)를 통해 특정 엔티티 필드의 값을 수정한 이후
tx.commit()이 호출되어 내부적으로 flush()가 호출될 때,
flush() 호출 전
엔티티 매니저는 변경 감지 기능을 통해 영속성 컨텍스트 내 존재하던 이전 스냅샷(bookName=JPA)과 새롭게 업데이트된 스냅샷(bookName=“ABC”)을 비교
flush() 호출 후
영속성 컨텍스트 - 데이터베이스 테이블 간 동기화 작업 수행
→ 실제 UPDATE 쿼리 수행
