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 :

[Hibernate] Suppression d'un element d'une collection


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut [Hibernate] Suppression d'un element d'une collection
    Voila, j'ai un petit soucis avec Hibernate lorsque j'essais de supprimer un element d'une collection dans une classe :

    Soit une classe User possedant une collection de Fichier.

    Lors de la suppression d'un Fichier de la collection de l'utilisateur, la base ne se met pas à jour.

    Le code principal :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public void supprimerFichier(int idUser,int idFichier) {
     
            User us;
            Fichier f ;
     
            try {
                us = recupererUser(idUser); //Exception a gerer
                f = manager.recupererFichier(idFichier); //On recupère le fichier
     
            }
            catch (IllegalArgumentException e){
                throw e;
            }
            //Test bidon ca passe sans soucis
            if (f == null)
                System.out.println("Probleme de recuperation fichier");
     
            //On reattache l'user a la persistance pour la prise en compte des modif
            try {
                manager.startSession();
                manager.startTransaction();
                manager.attach(us);
                us.removeFichier(f);//On enleve le fichier de la liste
                manager.commit();
                manager.closeSession();
     
              /*  StockageFichier stock = new StockageFichier();
                stock.setEspacePerso(us.getNom()+ us.getPrenom());
                stock.supprimer(f.getNom());*/
     
            } 
            catch (IllegalArgumentException e) {
                e.printStackTrace(); //Avertir du pb le fichier ne peut être supprimé
            } 
            catch (IOException e) {
                e.printStackTrace(); //Avertir du pb le fichier ne peut etre supprimé
            } 
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    Le code de removeFichier de la classe User

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void removeFichier(Fichier fichier) {
                if (fichier == null)
                    throw new IllegalArgumentException("Impossible de retirer un fichier inexistant");     
                fichier.setUser(null);
                this.getFichiers().remove(fichier);
            }
    LOgiquement, l'user etant attaché a la session, les modif devrai etre prise en compte. Faut t'il explicitement supprimé l'objet Fichier (ca me parait a contresens du principe Hibernate).

    Précision : ma relation est déclarer dans les fichier XML avec cascade="all".

    Une idée du soucis ?

  2. #2
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Tu peux essayer de balancer un flush() juste avant le commit et dire ce qu'il en est ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Avec un flush() juste avant le commit même chose, l'élément n'est pas supprimé de la base de données.

    J'ai testé en debug avec suivi des variable : ma fonction recupererFichier me retourne bien le bon fichier

  4. #4
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Et en affichant les requetes SQL issues d'Hibernate, est ce que tu vois la requete d'effectuer ou non ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Et ben non justement, aucune trace de requete visant a supprimer ou modifier quoi que ce soit ...

    Voici la trace d'execution lors de l'appel a la methode supprimerFichier ci dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Hibernate: select user0_.id as id0_0_, user0_.nom as nom0_0_, user0_.prenom as prenom0_0_, user0_.societe as societe0_0_, user0_.quota_aut as quota5_0_0_, user0_.quota_cour as quota6_0_0_, user0_.login as login0_0_, user0_.pass as pass0_0_ from utilisateurs user0_ where user0_.id=?
    Hibernate: select fichier0_.id as id1_0_, fichier0_.nom as nom1_0_, fichier0_.date_depot as date3_1_0_, fichier0_.lien_dl as lien4_1_0_, fichier0_.util_id as util5_1_0_ from fichiers fichier0_ where fichier0_.id=?
    Hibernate: select user0_.id as id0_0_, user0_.nom as nom0_0_, user0_.prenom as prenom0_0_, user0_.societe as societe0_0_, user0_.quota_aut as quota5_0_0_, user0_.quota_cour as quota6_0_0_, user0_.login as login0_0_, user0_.pass as pass0_0_ from utilisateurs user0_ where user0_.id=? for update
    Hibernate: select fichiers0_.util_id as util5_1_, fichiers0_.id as id1_, fichiers0_.id as id1_0_, fichiers0_.nom as nom1_0_, fichiers0_.date_depot as date3_1_0_, fichiers0_.lien_dl as lien4_1_0_, fichiers0_.util_id as util5_1_0_ from fichiers fichiers0_ where fichiers0_.util_id=?
    Bizarre bizarre

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Petite remontée, toujours le problème mais je ne vois pas d'ou cela peut venir.

    L'objet est bien attaché à une session, mais pas de modification de la base lors du retrait d'un élément de la Collection.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2007, 15h54
  2. suppression d'un element d'une liste
    Par Mat_DZ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/09/2006, 18h58
  3. Réponses: 3
    Dernier message: 31/05/2006, 14h12
  4. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  5. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49

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