JPA에서 사용하는 개념 => 영속성 컨텍스트
Entity를 영구 저장하는 환경
눈에 보이지 않는 논리적 개념
애플리케이션과 DB 사이 객체를 보관하는 가상의 DB라고 생각하면 편하다
영속성 컨텍스트에 Entity를 보관 및 관리
사용자가 Entity를 영속성 컨텍스트에 접근 및 관리 할 수 있도록 도와주는 매니저
EntityManagerFactory를 통해 요청이 올 때마다 EntityManager를 생성
*EntityManager는 내부적으로 Connection을 사용하여 DB 접근
즉, 한개의 영속성 컨텍스트가 여러개의 EntityManager에 대응할 수 있다.
EntityManager에 영속성 컨텍스트에 보관, 관리, 삭제되는 Entity의 생명주기
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ssafy");
EntityManager em = emf.createEntityManager();
Member member = new Member();
em.persist(member);
em.detach(member) => 특정 엔티티만 준영속 상태로 변환
em.clear() => 영속성 컨텍스트 초기화
em.close() => 영속성 컨텍스트 종료
em.remove(member)
- 1차 캐시 및 동일성 보장
- 트랜잭션 쓰기 지연
- 변경 감지
- 지연 로딩
❔ 1차 캐시가 동작하는 과정은 ❔
1. 엔티티 생성 후 영속화(영속성 컨텍스트에 보관)
2. 해당 엔티티 조회
2-1. JPA는 영속성 컨텍스트에 1차 캐시 확인
2-2. 만약 key가 같은 값이 있으면 캐시에서 값을 가져온다
2-3. 만약 없다면 DB 조회
3. DB에 데이터가 있으면 가져오고 1차 캐시에 저장 후 데이터 변환
em.persist(member)
transaction.commit()