Hibernate version: 3.2.4
Oracle 9.2
Bonjour,
Nous avons actuellement un enregistrement d'une table mis à jour par deux process différents. Cette table est définie avec un mapping "optimistic-lock" (une colonne de version dans la table).
Sur un flush() dans un des process, il arrive que l'exception "StaleObjectStateException" soit levée: normal car l'objet a été mis à jour par l'autre process.
J'essaye alors, dans ce cas, de faire un refresh() de l'objet (qui remonte les informations correctes de la base de données y compris le numéro de version d'après le debug), de le mettre à jour après récupération des modifications éventuelles et de le sauver de nouveau. Mais l'exception "StaleObjectStateException" est de nouveau levée.
Code:
///
homme.setAge(42);
try
{
session.flush(); //-----> Levée de l'exception StaleObjectStateException
}
catch (StaleObjectStateException e)
{
session.refresh(homme);
/*
Récupération des valeurs éventuellement importantes sur homme faites par l'autre process
*/
homme.setAge(42);
session.flush(); // ---> Exception StaleObjectStateException de nouveau levée
}
///
Je pensais que le refresh() rechargeait l'état de l'objet de la base de données pour avoir un objet de nouveau cohérent dans la session.
Est-ce que j'ai manqué quelque chose ou pas compris le fonctionnement du refresh() ou est-ce qu'il n'y a aucun moyen de se récupérer dans la session après une exception?
Merci d'avance