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 :

Comment détacher un objet ?


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut Comment détacher un objet ?
    La question est dans le titre. Comment détacher un objet de la session ?

    Plus précisément, j'ai récupéré une grappe d'objets A et de sous-objet B. Or je voudrais pouvoir supprimer A sans supprimer B.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Si tu n'as pas précisé de stratégie de cascade, supprimer tes A ne devraient pas supprimer tes B.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Je n'ai précisé aucune stratégie de cascade.

    Le problème que je rencontre est que dans certains cas, je dois supprimer A et B, et dans certains cas, seulement A.

    Or, lorsque je veux supprimer A et B, je supprimer d'abord B, et j'ai une Exception à la suppression de A.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    quel genre d'exception ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    PropertyValueException

    Et si je fais l'inverse, c'est-à-dire supprimer d'abord A puis B, j'ai une BatchedTooManyRowsAffectedException :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Batch update returned unexpected row count from update [0]; actual row count: 13; expected: 1

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Je pense que la dernière exception (BatchedTooManyRowsAffectedException) vient du fait que les sous-objets B peuvent être partagé par les instances de A. C'est-à-dire que plusieurs instances de A peuvent référencer le même sous-objet B (ou du moins des objets B ayant le même identifiant unique).

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (A action : list) {
        B suivi = action.getB();
        dao.detacher(suivi);
        dao.supprimer(action);
     
        if (suivi != null && aSupprimer.remove(suivi)) {
            dao.mettreAJour(suivi);
            dao.supprimer(suivi);
        }
    }
    La méthode detacher() appelle Session.evict().

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Une âme charitable et éclairée pour m'aider dans ma quête ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Salut Verbose!

    Je déterre le sujet mais vu que j'ai le même problème, je me demandais si tu avais résolu ton problème et surtout : Comment? Puisque j'imagine que cela doit être le cas! =D

    Bonne journée!

  9. #9
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Hello,

    A mon avis, tu es dans un contexte transactionnel. Cela veux dire que ton objet A n'est pas encore effectivement supprimé en base lorsque tu tentes de supprimer B. Il faut que tu sortes de ta transaction (sortir de l'ejb si tu es sous JEE, ne pas marquer ta méthode @transactionnal si tu es sous spring). avant de supprimer ton deuxieme objet.

    Cordialement,

Discussions similaires

  1. [VS.NET] Comment enregistrer un objet COM
    Par Dnx dans le forum Visual Studio
    Réponses: 5
    Dernier message: 24/03/2005, 22h38
  2. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28
  3. [servlet][bean]comment récupérer l'objet request
    Par otminou dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 27/09/2004, 14h40
  4. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34

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