ID de versión generado de base de datos con WSJPA
Java™ Persistence API for WebSphere Application Server (WSJPA) tiene un OpenJPA ampliado para trabajar con ID de versión generados de base de datos. Estos cambios de versión generados, indicación de fecha y hora o señal, se pueden utilizar para detectar eficazmente los cambios en una fila determinada.
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeTimestampStrategy"), si el tipo de campo de versión de entidad es Timestamp, y
- @VersionStrategy("com.ibm.websphere.persistence.RowChangeVersionStrategy"), si el tipo de campo de versión de entidad es 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;
}
La sentencia de crear tablas es la siguiente: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));
Durante las actualizaciones de Item, insert o update, el valor de VersionColumn se actualiza en la base de datos. Después de la actualización, el valor de VersionColumn se recupera de la base de datos y se actualiza
en el objeto en memoria. Por lo tanto, los objetos en la memoria caché de datos
reflejan el valor de versión correcto. Aquí la entidad utiliza @VersionColumn que
produce un ID de versión sustituta en lugar de definir un campo explícito en la entidad. La entidad también podría utilizar la anotación @Version para definir un campo explícito de versión. El campo explícito de versión podría ser de tipo Long o Timestamp correspondiente a @VersionStrategy. Durante las actualizaciones de Item, insert o update, el valor Version se actualiza en la base de datos. Después de la actualización, el valor de Version se recupera de la base de datos y se actualiza en el objeto en memoria. Por lo tanto, los objetos en la memoria caché de datos reflejan el valor de versión correcto.
@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;
}

- Para z/OS DB2 V9 y Linux, UNIX y Windows DB2 V9.5, la columna de base de datos generada debe ser del tipo de indicación de fecha y hora (timestamp) pero se soporta tanto RowChangeTimestampStrategy como RowChangeVersionStrategy. Microsoft SQL Server sólo da soporte a un ID de versión generado que no sea de indicación de fecha y hora y que vaya con RowChangeVersionStrategy. Para utilizar RowChangeTimestampStrategy, debe utilizar un desencadenante en el campo de indicación de fecha y hora de la base de datos. Para otras bases de datos, puede utilizar desencadenantes para simular la generación de versión de base de datos y utilizar cualquiera de las dos estrategias.
- Para z/OS DB2 V9, instale el PTF para el APAR PK67706 y asegúrese de que hayainstalado el nivel necesario de IBM® Optim PureQuery Runtime (1.3.100 o posterior) y los controladores JCC (3.52.95 o posterior).