Une petite question qui me pose des problèmes actuellement.
Je suis sur une application avec deux bases de données.
La première, locale, est gérée grâce à Hibernate (version 3.0.5). La seconde, distance (un site web) est accédée par des Statement et Connection classiques.
Pour envoyer un objet vers la base, j'utilise donc les méthodes save/update de Hibernate, et le Statement.
Si un erreur arrive sur l'une des deux transactions, j'attrappe l'exception et j'annule les deux transactions. J'ai donc du faire un système de rollback manuel. En effet, impossible de faire un rollback sur une transaction terminée, quand l'autre ne fonctionne pas.
Pour faire ce rollback, je dois donc, en cas de mise à jour d'un objet, sortir de la base la version précédante non modifiée, enregistrer la nouvelle et, en cas de problème, renvoyer la version précédante.
C'est là qu'est le problème: Hibernate me dit, avec raison, qu'il existe deux versions différentes du même objet et je ne peux pas sauvegarder l'objet modifié.
L'erreur exacte est: "a different
object with the same identifier value was already associated with the
session"
Savez-vous comment je pourrais arranger ça?
Peut-on "sortir" un objet de la surveillance de hibernate?
J'ai essayé de mettre null à la place de l'id, en imaginant que Hibernate, utilisant l'id comme façon de départager deux objets (via equals() ), arriverait à la conclusion que les deux objets sont différents, mais ça ne semble pas marcher.
|