WSJPA でのデータベース生成バージョン ID

Java™ Persistence API for WebSphere® Application Server (WSJPA) は、データベースで生成されたバージョン ID を処理するように、OpenJPA を拡張しました。生成されたこれらのバージョンのフィールド、タイム・スタンプ、またはトークンを、 特定の行への変更を効率的に検出するのに使用できます。

トリガー・ベースのバージョン ID 生成は、WebSphere Application Server がサポートするすべてのデータベースでサポートされています。サポートは、JPA for WebSphere Application Server における 2 つのバージョン方針に基づいて行われます。
  • @VersionStrategy(「com.ibm.websphere.persistence.RowChangeTimestampStrategy」) ( エンティティーのバージョン・フィールド・タイプが Timestamp の場合)
  • @VersionStrategy(「com.ibm.websphere.persistence.RowChangeVersionStrategy」) ( エンティティーのバージョン・フィールド・タイプが Long の場合)
エンティティー・クラスは新しいバージョン方針アノテーションを使用して 定義されます。エンティティーには、代理のバージョン列があります。以下に例を示します。
 @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 の値はデータベースから取り出され、メモリー・オブジェクト内で更新されます。その結果、 データ・キャッシュ内のオブジェクトは正しいバージョン値を反映します。ここで、エンティティーは、エンティティー内で明示的なフィールドを定義するのではなく、代理バージョン ID を作成する @VersionColumn を使用します。

エンティティーは @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;
}
トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): RowChangeVersionStrategy を使用する際は、以下の条件に注意してください。
  • z/OS® DB2® V9、および Linux、 UNIX、および Windows DB2 V9.5 の場合、生成 されるデータベース列のタイプは timestamp である必要がありますが、RowChangeTimestampStrategy および RowChangeVersionStrategy の両方がサポートされます。Microsoft SQL Server は、 RowChangeVersionStrategy と共に使用される、timestamp でない、生成されるバージョン ID のみをサポートします。 RowChangeTimestampStrategy を使用するには、 データベース内において timestamp フィールドでトリガーを使用する必要があります。他のデータベースの場合は、トリガーを使用してデータベース・バージョン生成をシミュレートし、いずれかの方法を使用することができます。
  • z/OS DB2 V9 の場合は、PTF for APAR PK67706 をインストールし、必要なレベルの IBM® Optim™ PureQuery Runtime (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