![[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.1 功能部件而不是 jpa-2.0 功能部件,那么您可能需要在迁移过程中调整应用程序。
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:缺省情况下缓存被禁用。如果应用程序需要使用二级高速缓存,那么必须显式启用二级高速缓存。
-
jpa-2.1:缺省情况下,EclipseLink 提供程序已启用二级高速缓存和 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 功能部件
OpenJPA 是 JPA 2.0 提供程序,它包含的功能部件的功能与新 JPA 2.1 功能部件类似。这意味着,如果您的现有应用程序使用 jpa-2.0 功能部件并想要使用 JPA 2.1 的一些新功能部件,那么不必切换至 jpa-2.1 功能部件。您可改为使用 OpenJPA 提供的新功能部件的等价项。OpenJPA 中可用的一些 JPA 2.1 功能部件包括:
- 模式生成
-
此功能部件允许您生成 DDL 或直接与数据库交互以根据 JPA 实体定义来定义表模式。有关更多信息,请参阅 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 的解包实用程序方法和高速缓存
-
请参阅 JPA 2.1 规范的 3.1.1 和 7.10 节。
OpenJPA 等价功能部件:EntityManagerImpl.unwrap() 和 OpenJPAPersistence.cast()
- 从本机 SQL 映射结果时的对象构造
-
请参阅 JPA 2.1 规范的 3.10.16.2.2 节。
OpenJPA 等价功能部件:ResultShape 对象