Sobes.tech
Junior — Middle

Comment mettre en œuvre un mécanisme de verrouillage optimiste dans Hibernate pour éviter les conflits lors d'un accès simultané aux données?

sobes.tech IA

Réponse de l'IA

Le verrouillage optimiste dans Hibernate est réalisé à l'aide de l'annotation @Version. Cette annotation ajoute un champ spécial (par exemple, version) à l'entité, qui est automatiquement incrémenté à chaque mise à jour de l'enregistrement. Lors de la sauvegarde, Hibernate vérifie que la version dans la base de données correspond à la version de l'objet en cours de mise à jour. Si les versions ne correspondent pas, cela signifie que les données ont été modifiées par une autre transaction, et une exception OptimisticLockException est levée.

Exemple:

@Entity
public class Product {
    @Id
    private Long id;

    @Version
    private int version;

    private String name;
    private int quantity;

    // getters et setters
}

Ainsi, lors d'un accès simultané à un même enregistrement, si un utilisateur met à jour les données et qu'un autre tente de sauvegarder une version obsolète, Hibernate détectera le conflit et empêchera la réécriture des données sans prendre en compte les modifications de l'autre utilisateur.