由数据库生成的版本标识(通过 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;
}
避免故障 避免故障: 使用 RowChangeVersionStrategy 时了解以下条件:
  • 对于 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 或更高版本)。
gotcha

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



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_genversionID
文件名:cejb_genversionID.html