estoy usando Ebean con Play marco 2 y, a veces cae con OptimisticLockException de este tipo:OptimisticLockException con Ebean and Play Marco 2
play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[OptimisticLockException: Data has changed. updated [0] rows sql[update manager set modification_time=?, session_id=?, expiration_date=? where id=? and rating=? and creation_time=? and modification_time=? and name=? and surname=? and login=? and password_hash=? and email=? and session_id=? and expiration_date=?] bind[null]]]
Esto sucede cuando algunos actores comienzan a tener acceso a la base de datos.
Por lo tanto, la clase Manager es:
public class Manager extends Model {
@Getter @Setter
Long id;
@Getter @Setter
private String name;
@Getter @Setter
private String surname;
@Column(unique = true)
@Getter @Setter
private String login;
@Getter @Setter
private String passwordHash;
@Getter @Setter
private String email;
@Embedded
@Getter @Setter
private ManagerSession session;
@Getter
private Timestamp creationTime;
@Getter
private Timestamp modificationTime;
@Override
public void save() {
this.creationTime = new Timestamp(System.currentTimeMillis());
this.modificationTime = new Timestamp(System.currentTimeMillis());
super.save();
}
@Override
public void update() {
this.modificationTime = new Timestamp(System.currentTimeMillis());
super.update();
}
}
Guardar ganchos() y update() se utilizan anotaciones en lugar @PrePersist, debido Ebean no lo soporta. Como sé @Version Annotation siempre trae el modo de bloqueo optimista, así que empiezo a usar ese truco. Sé lo que es el bloqueo de Optimistick, pero ¿cómo debería resolverse esta situación, cuando muchos actores deberían modificar el mismo registro de db, donde gana la última modificación?
Sí, tienes razón. Pero mi problema no estaba aquí. El problema estaba en la anotación @Version en lo profundo de la jerarquía de clases. De todos modos, tu respuesta es muy útil para alguien que se enfrenta a tales problemas por primera vez. Deja que sea aceptado. –
¿Cómo se obtiene ** id ** para llamar a * Venue.find.byId (id)) * antes del enlace del formulario? –