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

Spring Java Discussion :

HibernateTemplate.saveOrUpdate() -> NonUniqueObjectException


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Par défaut HibernateTemplate.saveOrUpdate() -> NonUniqueObjectException
    Bonjour,

    j'ai le code suivant (appellé dans une transaction) qui me produit une NonUniqueObjectException.

    Je crée un objet Tome. Si il n'existe pas déjà en BD je fais appel à hibernateTemplate.save(), si il existe déjà je fais appel à saveOrUpdate().
    Seulement voilà, dans le cas du saveOrUpdate() j'obtiens une NonUniqueObjectException et je n'arrive pas à comprendre pourquoi.

    En aucun cas je ne récupère le tome existant de la BD avant de faire appel à createTome(), donc je ne vois pas comment je pourrais avoir 2 objets de type Tome référencant la même entité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public void createTome(String label) {
     
      tome = new Tome();
      tome.setLabel(label);
      saveTome(tome) 
     
    }
     
    public void saveTome(Tome tome) {
      String existingTomeId = exist(tome);
      if ( existingTomeId != null ) {
          tome.setId(existingTomeId);
          hibernateTemplate.saveOrUpdate(tome); // --> NonUniqueObjectException
      }
      else {
        hibernateTemplate.save(tome);
      }
    }
     
    public String exist(Tome tome) {
     
      Tome existingTome = null;
     
      List<Tome> list = hibernateTemplate.find("from Tome where label = ?", tome.getLabel());
      if (list.size != 0) {
        existingTome = list.get(0);
      } 
     
      return existingTome.getId();
    }
    Merci d'avance pour toute aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Par défaut
    Bonjour djmalo

    Il n'y aurait pas une erreur de NullPointerException dans ta méthode ? A moins que tu ne l'aies pas postée en entier, si la liste renvoyée par hibernateTemplate est vide, ça doit péter ...

    Pour ce qui est de l'erreur NonUniqueObjectException, est-ce que tu peux essayer cet algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void saveTome(Tome tome) {
      // Récupérer l'entité qui a le même identifiant
     
      // Si elle vaut null
      // -- Créer un nouveau tome
      // Sinon
      // -- Recopier tous les attributs du paramètre "tome" dans cette entité
    }
    Je pense que l'erreur vient de là :
    Dans ton code, si un tome existe déjà, tu en recopies l'identifiant et tu envoies une nouvelle entité à persister à hibernateTemplate. Tu devrais procéder en sens inverse : si un tome existe déjà, tu écrases ses attributs avec tes nouvelles valeurs, et tu mets à jour ce tome via un saveOrUpdate().

    Bon courage

    Junta

Discussions similaires

  1. Problème SaveOrUpdate avec entity-name
    Par worldchampion57 dans le forum Hibernate
    Réponses: 5
    Dernier message: 11/04/2008, 12h06
  2. [Hibernate 3/Spring] HibernateTemplate non conseillé ?
    Par hugo123 dans le forum Hibernate
    Réponses: 13
    Dernier message: 08/04/2008, 12h24
  3. Probleme avec saveOrUpdate()
    Par faico dans le forum Hibernate
    Réponses: 3
    Dernier message: 03/04/2007, 16h03
  4. Hibernate 3 : HibernateTemplate.saveOrUpdate
    Par Ho(c)ine. dans le forum Hibernate
    Réponses: 11
    Dernier message: 03/04/2007, 09h41
  5. Réponses: 4
    Dernier message: 07/03/2007, 12h08

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