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;
}

- 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 以降) をインストール済みであることを確認してください。