![[8.5.5.6 이상]](../ng_v8556.gif)
Java Persistence API 2.1 동작 변경사항
애플리케이션에 이미 jpa-2.0 기능을 사용하고 있는 경우에는 마이그레이션 문제를 방지하기 위해 기존 애플리케이션에 jpa-2.0 기능을 계속해서 사용하는 것이 좋습니다. 새 애플리케이션의 경우에는 JPA 2.1 스펙에서 사용 가능한 새 기능을 이용할 수 있게 해 주는 jpa-2.1 기능을 사용하는 것이 좋습니다. jpa-2.0 기능 대신 jpa-2.1 기능을 사용하도록 기존 애플리케이션을 변경하려는 경우에는 마이그레이션 프로세스에서 애플리케이션을 조정해야 할 수 있습니다.
jpa-2.0과 jpa-2.1 간의 차이점
jpa-2.0 및 jpa-2.1 기능 간에는 알고 있어야 하는 몇 가지 주된 차이점이 있습니다.
- PersistenceProvider 클래스 이름
- jpa-2.0
- IBM® 제공자:com.ibm.websphere.persistence.PersistenceProviderImpl
- OpenJPA 제공자: org.apache.openjpa.persistence.PersistenceProviderImpl
- jpa-2.1
- org.eclipse.persistence.jpa.PersistenceProvider
- 캐싱 동작
-
jpa-2.0: 기본적으로 캐싱이 사용 안함으로 설정되어 있습니다. 애플리케이션이 L2 캐시를 이용해야 하는 경우에는 이를 명시적으로 사용으로 설정해야 합니다.
-
jpa-2.1: 기본적으로 EclipseLink 제공자는 L2 캐시 및 QueryCache가 사용으로 설정되어 있습니다. 사용자는 이 설정이 자신의 애플리케이션에 대해 최적의 옵션인지 확인해야 합니다. 클러스터와 같은 분산 환경에서 실행 중인 경우에는 캐시를 사용 안함으로 설정하거나, 서로 다른 노드가 서로 다른 데이터를 보유할 수 있음을 숙지해야 합니다.
- 개선/위빙 차이점
-
jpa-2.0: OpenJPA는 개선된 엔티티를 필요로 합니다. 자세한 정보는 JPA 엔티티의 개선에 대한 문서를 참조하십시오.
-
jpa-2.1: EclipseLink는 개선되지 않은 엔티티로 작동합니다. WebSphere Application Server는 정적 개선을 지원합니다.
지연 로딩 및 몇 가지 성능 이점과 같은 일부 기능을 사용할 수 없습니다.
- jpa-2.0(OpenJPA) 제공자와 함께 사용할 수 있도록 엔티티 클래스가 정적으로 개선된 경우, jpa-2.1 제공자를 사용하려면 이러한 클래스를 먼저 재컴파일해야 합니다.
- 데이터 소스 사용 차이점
-
jpa-2.0 기능은 비JTA 데이터 소스를 거의 사용하지 않으므로 애플리케이션을 튜닝할 때 비JTA 데이터 소스가 많이 필요하지 않습니다.
jpa-2.1은 데이터를 읽을 때 및 트랜잭션이 활성 상태가 아닐 때 비JTA 데이터 소스 연결을 사용합니다. 이는 이 기능을 사용할 때 비JTA 데이터 소스 연결 풀이 더 커야 함을 의미합니다.
두 JPA 제공자 간의 자세한 차이점은 OpenJPA -> EclipseLink 마이그레이션 안내 페이지를 참조하십시오.
OpenJPA에서 사용 가능한 JPA 2.1 기능
JPA 2.0 제공자인 OpenJPA에는 새 JPA 2.1 기능과 유사한 기능이 있습니다. 이는 jpa-2.0 기능을 사용하는 기존 애플리케이션이 있으며 JPA 2.1 새 기능을 일부 사용하려는 경우, jpa-2.1 기능으로 전환해야 할 필요가 없음을 의미합니다. 대신 OpenJPA에서 제공하는, 새 기능과 동등한 기능을 사용할 수 있습니다. OpenJPA에서 사용 가능한 몇 가지 주요 JPA 2.1 기능은 다음과 같습니다.
- 스키마 생성
-
이 기능은 JPA 엔티티 정의에 따라 테이블 스키마를 정의하기 위해 DDL을 생성하거나 데이터베이스와 직접 상호작용할 수 있게 해 줍니다. 자세한 정보는 JPA 2.1 스펙의 9.4절을 참조하십시오.
OpenJPA의 동등한 기능: 스키마 맵퍼
- 엔티티 그래프
-
이 기능은 엔티티 오브젝트의 그래프에 대해 페치 또는 처리를 지정할 수 있게 해 줍니다. 자세한 정보는 JPA 2.1 스펙의 3.7절을 참조하십시오.
OpenJPA의 동등한 기능: FetchPlan 및 FetchGroup
- 스토어드 프로시저 조회
이 기능은 데이터베이스에 저장된 프로시저를 호출할 수 있게 해 줍니다. 자세한 정보는 JPA 2.1 스펙의 3.10.17절을 참조하십시오.
OpenJPA의 동등한 기능: 조회 호출
- 기본 속성 유형 변환
-
이 기능은 기본 유형 속성의 속성 엔티티 표시와 데이터베이스 표시 간을 변환할 수 있게 해 줍니다. 자세한 정보는 JPA 2.1 스펙의 3.8절을 참조하십시오.
OpenJPA의 동등한 기능: 익스터널라이저 기능
- @Index 및 @ForeignKey 어노테이션
-
JPA 2.1 스펙의 11.1.19 및 11.1.23절을 참조하십시오.
OpenJPA의 동등한 기능: OpenJPA의 @Index 및 @ForeignKey
- EntityManager, Cache에 대한 유틸리티 랩핑 해제 메소드
-
JPA 2.1 스펙의 3.1.1 및 7.10절을 참조하십시오.
OpenJPA의 동등한 기능: EntityManagerImpl.unwrap() 및 OpenJPAPersistence.cast()
- 기본 SQL의 결과 맵핑 중 오브젝트 구현/구축(Construction)
-
JPA 2.1 스펙의 3.10.16.2.2절을 참조하십시오.
OpenJPA의 동등한 기능: ResultShape 오브젝트