Datenbankgenerierte Versions-ID mit WSJPA
WSJPA (Java™ Persistence API for WebSphere Application Server) verwendet erweitertes OpenJPA für die Arbeit mit datenbankgenerierten Versions-IDs. Diese generierten Versionsfelder, Zeitmarke oder Token, können verwendet werden, um Änderungen in einer bestimmten Zeile effizient zu ermitteln.
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy"), wenn die Entitätsversion den Feldtyp "Timestamp" (Zeitmarke) verwendet, und
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeVersionStrategy"), wenn die Entitätsversion den Feldtyp "Long" (lang) hat.
@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;
}
Die Anweisung für das Erstellen der Tabelle ist wie folgt: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));
Bei Aktualisierungen des Tabelleneintrags "Item", Einfügung oder Aktualisierung,
wird der Wert "VersionColumn" in der Datenbank aktualisiert.
Nach dieser Aktualisierung wird der Wert für "VersionColumn" aus der Datenbank abgerufen und im Speicherobjekt aktualisiert.
Dadurch zeigen die Objekte im Datencache den richtigen Versionswert an.
Hier verwendet die Entität ("Entity")
die "@VersionColumn", die eine Ersatzversions-ID erzeugt anstatt ein explizites Feld in der Entität zu definieren.Die Entität könnte auch die Annotation "@Version" verwenden, um ein explizites Versionsfeld zu definieren. Das explizite Versionsfeld könnte den Typ "Long" oder "Timestamp" verwenden, der der "@VersionStrategy" entspricht. Bei Aktualisierungen von "Item", Einfügung oder Aktualisierung, wird der Wert "Version" in der Datenbank aktualisiert. Nach dieser Aktualisierung wird der Wert für "Version" aus der Datenbank abgerufen und im Speicherobjekt aktualisiert. Dadurch zeigen die Objekte im Datencache den richtigen Versionswert an.
@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;
}

- Für z/OS DB2 V9 und DB2 V9.5 unter Linux, UNIX und Windows muss die generierte Datenbankspalte den Typ "timestamp" (Zeitmarke) haben, aber auch RowChangeTimestampStrategy und RowChangeVersionStrategy werden unterstützt. Microsoft SQL Server unterstützt nur eine nicht auf der Basis von Zeitmarken generierte Versions-ID, die mit "RowChangeVersionStrategy" verwendet wird. Zur Verwendung von "RowChangeTimestampStrategy" muss ein Auslöser in einem Zeitmarkenfeld in der Datenbank verwendet werden. Für andere Datenbanken können Sie Auslöser verwenden, die die Generierung der Datenbankversion simulieren, sowie deren Strategie verwenden.
- Für z/OS DB2 V9 installieren Sie die vorläufige Programmkorrektur für APAR PK67706 und die erforderlichen Versionen von IBM® Optim PureQuery Runtime (1.3.100 oder) und der JCC-Treiber (3.52.95 oder höher).