Java™ Persistence API는
지속성 프로그래밍 모델의 단순화를 나타냅니다.
관계형 데이터베이스와 같은 비휘발성 스토리지 형태의 애플리케이션 세션 간에
데이터를 관리하는 기능인 데이터 지속성은 엔터프라이즈 애플리케이션에 대해
중요합니다. 이 환경에 대해 개발된 애플리케이션은 데이터 지속성을 직접 관리하거나
써드파티 솔루션을 사용하여 데이터베이스 업데이트 및 검색을 처리해야 합니다.
JPA는
데이터 지속성 관리 및 오브젝트 관계 맵핑을 위한 메커니즘과 EJB 3.0 스펙의 기능을
제공합니다.
JPA는 Java EE
환경에 적용되는 Java 프로그래밍 모델을
기반으로 하지만 JPA는 Java SE 환경에서도
작동할 수 있습니다. JPA 스펙은 벤더 특정 맵핑 구현에 의존하지 않고 내부적으로 오브젝트 관계 맵핑을
정의하며, 어노테이션 또는 XML을 사용하여 데이터베이스 테이블에 오브젝트를 맵핑합니다.
JPA는 Java Enterprise
Edition(Java EE)
컨테이너의 내부와 외부 모두에서 작동하도록 디자인되었습니다. 컨테이너
내부에서 JPA를 실행하는 경우 애플리케이션은 컨테이너를 사용하여
지속성을 관리할 수 있습니다. JPA를 관리할 컨테이너가 없는 경우
애플리케이션은 지속성 관리를 직접 처리해야 합니다. 컨테이너 관리 지속성에 대해
디자인된 애플리케이션은 컨테이너 외부에서 사용할 수 없지만,
자신의 지속성을 직접 관리하는 애플리케이션은
Java SE
환경 또는 컨테이너 환경에서 작동할 수 있습니다.
또한 JPA는 작업하는 데이터베이스와 관련된 SQL 조회를 쓰지 않고
오브젝트를 검색하는 데 사용할 수 있는 JPQL이라는 조회 언어를
제공합니다.
JPA를 지원하는 Java EE
컨테이너는 지속성 제공자를 공급해야 합니다. JPA 지속성 제공자는 다음 요소를 사용하여
EJB 3.0 환경의 데이터를 지속합니다.
- 엔티티 오브젝트: 엔티티는 데이터베이스 테이블의 한 행을 나타내는
단순한 Java
클래스입니다. 엔티티는 구체적 클래스 또는 추상 클래스가 될 수 있습니다. 엔티티는
특성 또는 필드를 사용하여 상태를 관리합니다.
- EntityManager: EntityManager 오브젝트는 애플리케이션이 사용하는 엔티티 오브젝트의
활성 콜렉션을 관리합니다. EntityManager 오브젝트는 오브젝트 관계 맵핑의
데이터베이스 상호작용 및 메타데이터를 처리합니다. EntityManager 오브젝트의 인스턴스는
지속성 컨텍스트를 나타냅니다. 컨테이너 내 애플리케이션은 애플리케이션에 직접
삽입하거나 Java 컴포넌트
이름 공간에서 검색하여 EntityManager를 얻을 수 있습니다.
애플리케이션이 해당
지속성을 관리하는 경우 EntityManager는 EntityManagerFactory에서 얻습니다.
일반적으로 애플리케이션 서버 컨테이너에서
이 기능을 제공하지만 JPA 애플리케이션 관리 지속성을 사용하는 경우 EntityManagerFactory가
필요합니다.
참고: EntityManager
인젝션은 다음 아티팩트에서만 지원됩니다.
- EJB 3.0 세션 Bean.
- EJB 3.0 메시지 구동 Bean
- Servlet(JSP에서는 인젝션이 지원되지 않음)
- 애플리케이션 클라이언트의 기본 클래스
- EntityManagerFactory: 이 팩토리는 데이터베이스 상호작용을 위해 EntityManager를
작성하는 데 사용됩니다.
- 지속성 단위: 지속성 단위는 관계형 데이터베이스에 대한 엔티티 클래스 오브젝트의 관계를
선언하는 선언 메타데이터로 구성됩니다. EntityManagerFactory는
이 데이터를 사용하여 EntityManager를 통해
액세스할 수 있는 지속성 컨텍스트를 작성합니다.
- 지속성 컨텍스트: 지속성 컨텍스트는 애플리케이션이 처리하는
활성 인스턴스의 세트입니다. 지속성 컨텍스트는
수동으로 작성하거나 인젝션을 통해 작성할 수 있습니다.