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 :
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
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(); } }
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).
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); }
Précision : ma relation est déclarer dans les fichier XML avec cascade="all".
Une idée du soucis ?
Partager