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 ?