-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Versionnage automatique pour le mod objets détachés
PostPosted: Mon Oct 09, 2006 5:11 am 
Newbie

Joined: Mon Nov 21, 2005 12:28 pm
Posts: 4
Bonjour,

Quelqu'un pourrait t'il m'expliquer comment implémenter le versionnage automatique dans Hibernate dans le cadre de la gestion de la concurrence?
Le sujet est évoqué dans la documentation Hibernate, mais non implémenté :/

D'après la documentation, il faut implémenté une colonne dans chaque table qui contiendra le versionning. Mais comment implémenter sa dans le code Java pour la comparaison des objets?

Cordialement,

Alexandre

_________________
Si vous n'avez pas peur, c'est que vous êtes déjà mort...


Top
 Profile  
 
 Post subject:
PostPosted: Wed Oct 18, 2006 1:24 pm 
Newbie

Joined: Wed Oct 18, 2006 11:18 am
Posts: 9
Location: Nanterre, France
Bonjour,

le but du jeu est de minimiser les contrôles dans le code applicatif : les cas de modifications concurrentes sont signalées par Hibernate par l'envoi d'une StaleObjectStateException.

Pour ajouter le "versioning" à une entité, il suffit de déclarer une propriété de type intégral spécifique (typiquement "version") qui servira de numéro de version (cf. documentation Hibernate :
http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#mapping-declaration-version).

Si tu utilises XDoclet, il faut ajouter le tag "@hibernate.version" sur cette propriété.
Au final, il faut avoir l'élément "version" dans le fichier de mapping pour la classe considérée.

Si tu utilises Hibernate Annotations, c'est l'annotation "@Version".

Dès lors, lorsque ton code va soumettre une instance à Hibernate pour persistence, celui-ci va vérifier le numéro de version de celle-ci par rapport à ce qu'il y a dans la base. Si l'état en base est plus récent que celui que tu soumets, une StaleObjectStateException sera levée.
A toi de la gérer alors, typiquement en relisant l'état de ton entité depuis la base et en relançant tout le process qui t'a mené au point où tu en es (réaffichage de formulaire, entrée utilisateur, etc...).

Note: tu peux également utiliser une propriété de type temporel pour effectuer le "versioning" (qui correspondra à la date de dernière modification de l'entité). Dans ce cas, il faut déclarer un "timestamp" et non plus une "version" dans le fichier de mapping.

J'espère que cela aide.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.