¿Cómo implementar un mecanismo de bloqueo optimista en Hibernate para evitar conflictos en el acceso simultáneo a los datos?
sobes.tech AI
Respuesta de la IA
El bloqueo optimista en Hibernate se implementa mediante la anotación @Version. Esta anotación añade un campo especial (por ejemplo, version) a la entidad, que se incrementa automáticamente con cada actualización del registro. Al guardar, Hibernate verifica que la versión en la base de datos coincida con la versión del objeto que se actualiza. Si las versiones no coinciden, significa que los datos han sido modificados por otra transacción, y se lanza una excepción OptimisticLockException.
Ejemplo:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// getters y setters
}
De esta forma, al acceder simultáneamente a un mismo registro, si un usuario actualiza los datos y otro intenta guardar una versión obsoleta, Hibernate detectará el conflicto y evitará sobrescribir los datos sin tener en cuenta los cambios realizados por el otro usuario.