: 엔티티를 영구 저장하는 환경 의미
- DB에 저장하는 게 아니라 영속성 컨텍스트라는 곳에 저장
- 영속성 컨텍스트는 논리적인 개념(눈에 안보임)
- 엔티티 매니저를 통한 영속성 컨텍스트에 접근
- 엔티티 매니저를 생성하는 영속성 컨텍스트 1:1 생성
Member member = new Member( );
member.setId("member1");
member.setUsername("회원1");
Member member = new Member( );
member.setId("member1");
member.setUsername("회원1");
EntityManager em = emf.createEntityManager( );
em.getTransaction( ).begin( );
// 객체를 저장한 상태(이 시점부터 영속)
em.persist( member );
em.detach(member);
"엔티티 객체가 영속성 컨텍스트와의 연결이 끊긴 상태"
연결이 끊어져서 영속→비영속으로 바뀌지 않는 이유는
연결이 완전히 끊어진 것이 아니라 다시 연결할 수 있기 때문
em.remove(member);
동일성(identity)보장
: 같은 엔티티 객체에 대한 동일성을 보장
트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
: 1차 캐시는 트랜잭션 범위 내에서 유지
즉, 한 번 시작된 트랜잭션 내에서는 같은 엔티티를 여러 번 조회하더라도
1차 캐시에 저장된 상태에서 제공(일관성을 유지, 중복 데이터베이스 조회X)
변경감지(Dirty Checking) : 엔티티의 변경 추적
지연 로딩(Lazy Loading)
: 동일한 엔티티가 여러 번 로드되어야 하는 상황에서, 1차 캐시를 통해 이미 로드한 엔티티는 다시 데이터베이스에서 가져오지 않고 캐시된 엔티티를 반환함으로써 성능을 최적화 함
: flush( )가 호출되는 시점에 Entity와 스냅샷을 전부 비교 후 변경된 것을 확인 후 자동 수정
1) 플러시 발생
2) 영속성 컨텍스트를 플러시하는 방법
3) 플러시 주요사항