Estoy experimentando con el bloqueo optimista.Bloqueo optimista y org.hibernate.StaleObjectStateException:
que tienen la clase siguiente:
@Entity
public class Student {
private Integer id;
private String firstName;
private String lastName;
private Integer version;
@Version
public Integer getVersion() {
return version;
}
//all other getters ommited.
}
ahora estoy ir a buscar uno de los estudiantes y tratar de actualizar sus propiedades al mismo tiempo.
Thread t1 = new Thread(new MyRunnable(id));
Thread t2 = new Thread(new MyRunnable(id));
t1.start();
t2.start();
y en el interior de MyRunnable:
lo que está sucediendo que las actualizaciones primera transacción objeto con éxito y segunda transacción Lanza:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.vanilla.entity.Student#1]
Esto está bien.
Mi pregunta es: 1) ¿Qué debo hacer si quiero que la segunda transacción no haga nada y no lanzar ninguna excepción.
2) ¿Qué debo hacer si deseo que la segunda transacción anule los datos actualizados en la primera transacción?
Gracias.