애플리케이션과 DB 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 보관하는 기능 수행
엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업 수행
-> 엔티티가 영속성 컨텍스트에 들어와 JPA의 관리 대상
이 되는 시점부터 해당 객체를 영속 객체
라고 함
세션 단위
의 생명 주기를 가짐
데이터베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고 세션이 사라지면 영속성 컨텍스트도 없어짐
엔티티 매니저
는 이러한 일련의 과정속에서 영속성 컨텍스트에 접근
하기 위한 수단으로 사용
엔티티 객체는 영속성 컨텍스트에서 다음과 같은 4가지 상태로 구분
비영속(New) : 영속성 컨텍스트에 추가되지 않은 엔티티 객체 상태
영속(Managed) : 영속성 컨텍스트 의해 엔티티 객체가 관리 되는 상태
준영속(Detached) : 영속성 컨텍스트 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태
삭제(Removed) : 데이터 베이스에서 레코드를 삭제 하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태
말 그대로 엔티티를 관리하는 객체
-> DB에 접근해서 CRUD 작업 수행
Spring Data JPA 사용 시에는 리포지토리
를 사용해서 DB에 접근
하는데, 내부 구현체인 SimpleJpaRepository가 리포지토리에서 엔티티 매니저를 사용하는 것 볼 수 있다
// SimpleJpaRepository의 EntityManager 주입 코드
public SimpleJpaRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entity Manage){
Assert.notNull(entityInformation, "JpaEntityInfomation must not be null");
Assert.notNull(entityManager, "EntityManager must not be null!");
this.entityInformation = entityInformation;
this.em = entityManager;
this.provider = PersistenceProvider.fromEntityManager(entityManager)
}
엔티티 매니저는 엔티티 매니저 팩토리(EntityManagerFactory)
에서 만듬
엔티티 매니저 팩토리란 DB에 대응하는 객체
-> 스프링 부트에는 자동 설정 기능이 있어 application.properties
에 작성한 최소한 설정만으로 동작하지만 하이버네이트에서는 persistence.xml
이라는 설정 파일을 구성하고 사용해야 함