Bonjour à tous,
J'aurais besoin d'aide, afin de gérer la concurrence optimiste d'Hibernate. J'ai fait le tour de la documentation officielle, ainsi que d'autre docs diverses, malheureusement, je ne trouve pas réponse à mes questions. Vous êtes donc mon dernier recours!
Mise en situation:
Un projet utilisant Spring et Hibernate. Nous avons des objets mappés à des tables Oracle par Hibernate en utilisant des annotations. Voici un exemple:
1 2 3 4 5 6 7
|
@Entity
@Table(name = "MEDECIN", uniqueConstraints = {@UniqueConstraint(columnNames = {"NO_PERMIS"})})
public class Medecin extends AbstractMedecin {
(...)
} |
Dans celle-çi, conformément à la procédure expliquée (très mal) sur le site d'Hibernate, j'ai ajouté un champ VERSION dans la table MEDECIN, et aussi dans mon objet, avec les annotations pour la concurrence optimiste d'Hibernate:
1 2 3 4
|
@Version
@Column(name="VERSION")
protected Integer version; |
Dans ma base de donnée Oracle, le champ VERSION est "INTEGER NOT NULL, DEFAULT 0".
Le problème, c'est qu'Hibernate n'incrémente pas du tout ce champ lorsqu'une mise à jour est effectuée sur l'objet mappé. Donc la gestion de concurrence optimiste ne peut pas fonctionner.
Même en spécifiant:
@org.hibernate.annotations.Entity(optimisticLock = org.hibernate.annotations.OptimisticLockType.VERSION)
...au debut de ma classe mappé, ça ne fonctionne tout simplement pas (pas d'incrémentation par Hibernate).
Merci de me diriger vers des pistes. Le principe semble relativement simple... il y a certainement quelque chose qui m'a échappé.

Partager