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.

La génération d'ID de version basée déclencheur est gérée pour toutes les bases de données prises en charge par WebSphere Application Server. Cette prise en charge se base sur deux versions de stratégie dans JPA pour WebSphere Application Server.
  • @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
La classe Entity est définie avec la nouvelle annotation de stratégie de version (VersionStrategy). L'entité comporte une colonne de version suppléante. Par exemple,
@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.

Dans l'exemple ci-dessous, un champ de version a été défini pour l'élément Entity et le type Timestamp correspond à la valeur RowChangeTimestampStrategy dans @VersionStrategy. Si le champ de version utilise le type long, RowChangeVersionStrategy sera annoté en conséquence pour lui correspondre :
@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;
}
Eviter les incidents Eviter les incidents: Respectez les conditions suivantes pour utiliser RowChangeVersionStrategy :
  • 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).
gotcha

Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_genversionID
Nom du fichier : cejb_genversionID.html