: 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성으로 쉽게 말하면 (없어지지 않고 오랜동안) 지속됨이라 표현할 수 있다.
엔티티는 위 그림과 같이 4가지가 존재한다.
비영속(new)
영속성 컨텍스트와 전혀 관계가 없는 상태
: 객체 생성
Person person = new Person("person");
영속(managed)
영속성 컨텍스트에 저장된 상태
: 객체 생성 후 EntityManager 를 통해 영속성 컨텍스트에 저장
entityManager.persist();
준영속(detached)
영속성 컨텍스트에 저장되었다가 분리된 상태
: 영속성 컨텍스트가 영속 상태였던 Entity 를 관리하지 않음 (3가지)
준영속 상태가 되면 1차 캐시부터 쓰기 지연 SQL 저장소까지 해당 엔티티를 관리하기 위한 모
든 정보가 제거됨
삭제(removed)
삭제된 상태
: 영속성 컨텍스트와 데이터베이스에서 Entity 삭제
entityManager.remove();
1차 캐시
: DB에 직접 접근하지 않아도 1차 캐시라는 공간에서 Entity를 가져올 수 있음
동일성 보장
: DB에서 조회한 Data를 기반으로 새로운 Entity를 생성하는 것이 아닌 1차 캐시에서 삽입, 조회
쓰기 지연
: 쓰기 지연 SQL 저장소라는 곳에서 한번에 실행 가능
변경 감지
: flush()가 실행될 때 Entity와 스냅샷을 먼저 비교하고 다른 것을 감지해 자동으로 Update문을 생성
flush()
: 변경 감지를 통해 엔티티를 찾고, 수정된 엔티티는 쓰기 지연 SQL저장소에 저장
이후 쓰기지연 저장소의 쿼리를 DB로 전달