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를 얻을 수 있습니다. 애플리케이션이 지속성을
관리하는 경우에는 EntityManagerFactory에서 EntityManager를 얻을 수 있습니다. 일반적으로 애플리케이션 서버 컨테이너에서
이 기능을 제공하지만 JPA 애플리케이션 관리 지속성을 사용하는 경우 EntityManagerFactory가
필요합니다.
참고: 다음 아티팩트에 대한
EntityManager 삽입만 지원됩니다.
- EJB 3.0 세션 Bean.
- EJB 3.0 메시지 구동 Bean
- Servlet(JSP에서는 삽입이 지원되지 않음)
- 애플리케이션 클라이언트의 기본 클래스
- EntityManagerFactory: 이 팩토리는 데이터베이스 상호작용을 위해 EntityManager를
작성하는 데 사용됩니다.
- 지속성 단위: 지속성 단위는 관계형 데이터베이스에 대한 엔티티 클래스 오브젝트의 관계를
선언하는 선언 메타데이터로 구성됩니다. EntityManagerFactory는 이 데이터를 사용하여
EntityManager를 통해 액세스할 수 있는 지속성 컨텍스트를 작성합니다.
- 지속성 컨텍스트: 지속성 컨텍스트는 애플리케이션이 현재 처리 중인 활성 인스턴스 세트입니다. 지속성 컨텍스트는
수동으로 작성하거나 삽입을 통해 작성할 수 있습니다.