ID de version de base de données généré avec WSJPA
Java™ Persistence API (JPA) for WebSphere Application Server (WSJPA) a étendu l'implémentation OpenJPA pour fonctionner avec les ID de version générés dans les bases de données. Ces champs de version générés, horodatage ou jeton, peuvent être utilisés afin de détecter efficacement les modifications apportées à une ligne donnée.
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy"), si le champ de version de l'entité est du type Timestamp, et
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeVersionStrategy"), si le champ de version est du type 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;
}
L'instruction de création de table est la suivante :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));
En cas de modification quelconque d'Item, insertion ou mise à jour, la valeur de la colonne VersionColumn
est actualisée dans la base de données. Après la mise à jour, la valeur de VersionColumn
est extraite de la base de données et actualisée dans l'objet en mémoire. Par conséquent, les objets dans le cache de données reflètent la valeur de version correcte. Entity utilise ici
@VersionColumn, qui génère un ID de version de substitution au lieu de définir un champ explicite dans l'entité. L'élément Entity pourrait également utiliser une annotation @Version afin de définir un champ de version explicite. Ce champ pourrait être du type Long ou Timestamp en fonction de la valeur de @VersionStrategy. En cas de modification quelconque d'Item, insertion ou mise à jour, la valeur de Version est actualisée dans la base de données. Après la mise à jour, la valeur de Version est extraite de la base de données et actualisée dans l'objet en mémoire. Par conséquent, les objets dans le cache de données reflètent la valeur de version correcte.
@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;
}

- Pour z/OS DB2 V9 et Linux, UNIX et Windows DB2 V9.5, la colonne de base de données générée doit être de type timestamp, mais RowChangeTimestampStrategy et RowChangeVersionStrategy sont tous deux pris en charge. Microsoft SQL Server ne prend en charge qu'un ID de version généré d'un type autre que timestamp, ce qui convient à RowChangeVersionStrategy. Pour employer RowChangeTimestampStrategy, vous devez utiliser un déclencheur sur un champ timestamp dans la base de données. Pour les autres bases de données, vous pouvez utiliser des déclencheurs pour simuler une génération d'ID de version dans base la de données et utiliser l'une ou l'autre stratégie.
- Pour z/OS DB2 V9, installez la PTF pour APAR PK67706 et assurez-vous d'avoir installé le niveau requis d'IBM® Optim PureQuery Runtime (1.3.100 ou ultérieur) et des JCC (3.52.95 ou ultérieur).