: 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음
즉, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
: JPA를 구현하기 위한 구현체 (EclipseLink, Hibernate, DataNucleus)
① Hibernate
: JPA 스펙의 구현체 중 하나로, 객체-관계 매핑(Object-Relational Mapping)을 위한 오픈 소스 프레임워크
② Spring Data JPA
: 스프링 프레임워크의 일부로, JPA를 사용하여 데이터 액세스 작업을 쉽게 처리하도록 지원하는 모듈
※ 차이점
Hibernate vs. Spring Data JPA
- Spring Data JPA는 Hibernate보다 더 높은 수준의 추상화된 인터페이스를 제공하며, Hibernate에 비해 더 많은 자동화된 기능과 코드 간소화를 제공
프로젝트의 요구 사항과 개발자의 선호에 따라 선택할 수 있으며, 단순한 어플리케이션의 경우 Spring Data JPA를 사용하는 것이 더 편리할 수 있음
① "엔티티 객체"가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행
② 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터 해당 객체를 "영속 객체"
영속성 컨텍스트는 "세션 단위"의 생명 주기를 가짐
ⓐ 데이터베이스에 접근하기 위한 세션이 생성되면
-> 영속성 컨텍스트가 생성
ⓑ 세션 종료
-> 영속성 컨텍스트 소멸
엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용됨
// 실제 내부 구현체 : SimpleJpaRepository
public SimpleJpaRepository(JpaEntityInformation<T,?>entityInformation, EntityManager entityManager){
Assert.notNull(entityInformation,"JpaEntityInformation must not be null!");
Assert.notNull(entityManager,"EntityManager must not be null!");
this.entityInformation = entityInformation;
this.em = entityManager;
this.provider = PersistenceProvider.fromEntityManager(entityManager);
}
① 비영속(New)
: 영속성 컨텍스트에 추가되지 않은 엔티티 객체
② 영속(Managed)
: 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
③ 준영속(Detached)
: 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태
④ 삭제(Removed)
: 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청 한 상태