由数据库生成的版本标识(通过 WSJPA)
Java™ Persistence API for WebSphere® Application Server (WSJPA) 对 OpenJPA 进行了扩展,使其能够与数据库生成的版本标识配合使用。这些生成的版本字段(时间戳记或标记)可用于有效地检测对给定行所作的更改。
WebSphere Application
Server 支持的所有数据库都支持基于触发器的版本标识生成。支持基于 JPA for WebSphere Application
Server 中的两个版本策略。
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy")(如果实体版本字段类型是 Timestamp)
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeVersionStrategy")(如果实体版本字段类型是 Long)
Entity 类是使用新的版本策略注释来定义的。
Entity 具有替代版本列。例如,
@Entity(name="Item")
@VersionColumn(name="versionField")
@VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy")
public class Item implements Serializable
{
@Id
private int id2;
private String name;
private double price;
@OneToOne
private Owner master;
}
create table 语句如下所示:CREATE TABLE ITEM
(ID2 INT NOT NULL,
NAME VARCHAR(50) ,
PRICE DOUBLE,
OWNER_ID INT,
VERSIONFIELD GENERATED ALWAYS FOR EACH ROW ON
UPDATE AS ROW CHANGE TIMESTAMP
PRIMARYKEY(ID2));
对 Item 进行任何更新(插入或更新)期间,将在数据库中更新 VersionColumn 值。更新后,将从数据库中检索 VersionColumn 的值并在内存对象中更新该值。因此,数据高速缓存中的对象将反映正确的版本值。在这里,Entity 是使用可生成替代版本标识的 @VersionColumn,而不是在实体中定义显式字段。Entity 也可以使用 @Version 注释来定义显式版本字段。显式版本字段可以是与 @VersionStrategy 对应的 Long 或 Timestamp 类型。对 Item 进行任何更新(插入或更新)期间,将在数据库中更新 Version 值。更新后,将从数据库中检索 Version 的值并在内存对象中更新该值。因此,数据高速缓存中的对象将反映正确的版本值。
在本示例中,Entity 定义了版本字段,并且 Timestamp 类型与 @VersionStrategy 中的 RowChangeTimestampStrategy 相匹。如果该版本字段的类型使用的是 Long 类型,那么应该对 RowChangeVersionStrategy 进行注释以与之匹配:
@Entity(name="Item")
@VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy")
public class Item implements Serializable
{
@Id
private int id2;
private String name;
private double price;
@Version
private Timestamp versionField;
@OneToOne
private Owner master;
}

- 对于 z/OS® DB2® V9 以及 Linux、UNIX 和 Windows 版的 DB2 V9.5,已生成数据库列的类型必须为时间戳记,但是同时支持 RowChangeTimestampStrategy 和 RowChangeVersionStrategy。Microsoft SQL Server 仅支持与 RowChangeVersionStrategy 搭配使用的非时间戳记生成的版本标识。要使用 RowChangeTimestampStrategy,您必须在数据库中的时间戳记字段上使用触发器。对于其他数据库,您可以使用触发器来模拟数据库版本生成及使用任一策略。
- 对于 z/OS DB2 V9,请安装 PTF for APAR PK67706,并确保您已安装了所需级别的 IBM® Optim™ PureQuery(1.3.100 或更高版本)和 JCC 驱动程序(3.52.95 或更高版本)。