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.0jpa-2.1 之间的差别

请注意,jpa-2.0jpa-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 2.0 的 JPA 实体增强功能

jpa-2.1:EclipseLink 使用未增强实体。WebSphere Application Server 支持静态增强功能。

某些功能部件(例如,延迟装入和一些性能增益)可能不可用。

  • 如果已静态增强实体类以与 jpa-2.0 (OpenJPA) 提供程序配合使用,那么必须在使用 jpa-2.1 提供程序前重新编译这些类。
  • 如果 Liberty 配置为使用 jpa-2.1 功能部件,并且实体已通过 OpenJPA 增强功能进行增强,那么将抛出以下错误:
    java.lang.NoClassDefFoundError: 
    org.apache.openjpa.enhance.PersistenceCapable.
  • 发生 NoClassDefFoundError 的原因是,当 Liberty 服务器配置为使用 jpa-2.1 时,OpenJPA 类在运行时不可供服务器使用。
    • 要解决此问题,请重新编译应用程序,并确保未使用 OpenJPA 增强程序来增强实体。请完全不要增强实体,或使用 EclipseLink 增强功能代替 OpenJPA 增强功能来增强实体。
    • 或者,保留实体处于其增强状态,并将 Liberty 重新配置为使用 jpa-2.0 功能部件。这会导致 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 对象。


用于指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_jpa21_behavior
文件名:cwlp_jpa21_behavior.html