영속성 컨텍스트와 식별자 값
영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본키와 매핑한 값)으로 구분한다.
영속 상태는 식별자 값이 반드시 있어야 한다. (없으면 예외 발생)
영속성 컨텍스트와 데이터베이스 저장
JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. 이것을 플러시(flush) 라고 한다.
영속성 컨텍스트가 엔티티를 관리하면 생기는 장점
1차 캐시
동일성 보장
트랜잭션을 지원하는 쓰기 지연
변경 감지
지연 로딩
영속성 컨텍스트는 내부에 캐시를 가지고 있는데 1차 캐시라 하며 영속 상태의 엔티티가 모두 이곳에 저장된다.
영속성 컨텍스트 내부에 Map이 하나 있고 키는 @Id로 매핑한 식별자고 값은 엔티티 인스턴스다.
em.persist(member)를 실행하면 1차 캐시에 회원 엔티티를 저장한다. (아직 데이터베이스에 저장X)
영속성 컨텍스트에 데이터를 저장하고 조회하는 모든 기준은 데이터베이스 기본키 값이다.