IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

version incremente dans l objet mais pas en BD


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 233
    Par défaut version incremente dans l objet mais pas en BD
    Bonjour

    Je suis tombe sur un probleme curieux. dans mon mappin pour chaque table j utilise la fonction version comme ci dessous:
    <version name="version" column="VERSION" type="long" unsaved-value="undefined"/>

    ca marche tres bien sauf dans le cas suivant:

    J ai 2 tables A et B liees l une a l autre (one to one).
    Si je fait un save(A) (qui se passe bien) puis un save(B) qui echoue et genere le rollback, j ai le problème.
    Le problème ne se produit pas si j utilise le cascade=save-update et non pas une sauvegarde « a la main »

    Je fais a un moment un appel a save pour recuperer l id de A pour le reutiliser (j ai besoin d un id unique pour autre chose)

    questions:
    1) est il incorrect de faire plusieurs saveOrUpdate dans une meme session ?
    2) il semble que dans certains cas hibernate a des pb de gestion des numeros de version en cas de rollback cf http://www.carmanconsulting.com/tapernate/. Qui a eut ces problemes ? (j utilise hibernate 3.0.5)

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Faire un saveOrUpdate d'un objet associé à une session est inutile.
    Dans le cas ou l'objet n'existe pas en base, faire une save.
    S'il existe, pas besoin de save ni de update.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 233
    Par défaut saveOrUpdate inutile
    cerstes sauver un objet associte est inutile car hibernate le fait automatiquement. Mais je le fais pour avoir l id de l objet nouvellement cree.

    Y a t il une autre solution pour recuperer cette id ??

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    cerstes sauver un objet associte est inutile car hibernate le fait automatiquement. Mais je le fais pour avoir l id de l objet nouvellement cree.

    Y a t il une autre solution pour recuperer cette id ??
    Désolé je n'ai pas compris.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 233
    Par défaut explication
    J utilise la cle primaire de la table pour autre chose (pour generer un numero de serie unique en fait ex id=30 numero = 2007_30 et ce numero est sauve a son tour dans une autre table )
    Or quand un element est cree, son id est null. donc j appelle un save() fait un get() sur l id et calcule mon numero.

    Autrement dit
    - debut transaction
    - table A a un id
    - save()
    - table B a un numero qui a ete calcule via l id de table A
    - la sauvegarde de table C declenche en cascade la sauvegarde de A et B
    - commit
    - fin transaction

    Ca marche tres bien sauf en cas de rollback suite a un pb en sauvant B ou j ai le champs version de A qui a ete incremente dans l objet mais pas dans la BD (pour cause de rollback)

    Pour l instant la seule solution pour etre sur de m en sortir, c est en cas d exception, de faire un session.refresh sur l objet. On relit ce qui est dans la BD et donc resoud le pb.

    Mais c est quand meme pas le plus elegant, c est plus un palliatif qu autre chose. C est pour ca que j aimerai savoir si on peu pas retrouver l id sans faire un save() ou a defaut faire que le rollback fasse un rollback de tout (ca marche peut etre avec une version recente hibernate, on a ici une 3.05 pour cause de compatibilite avec SAP)

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/07/2013, 11h32
  2. Objet existant reconnu dans une fonction mais pas dans une autre
    Par Jiyuu dans le forum Général Python
    Réponses: 0
    Dernier message: 20/09/2011, 18h19
  3. Réponses: 18
    Dernier message: 26/07/2006, 14h51
  4. Réponses: 2
    Dernier message: 25/03/2006, 18h54
  5. Applet qui s'execute dans un dossier mais pas dans l'autre
    Par Battosaiii dans le forum Applets
    Réponses: 11
    Dernier message: 10/12/2005, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo