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 :

Suppression des orphans lors de la mise à jour d'une collection


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut Suppression des orphans lors de la mise à jour d'une collection
    Bonjour à tous,

    Tout est dans le titre.
    Je sais que je ne suis pas la première personne à qui ça arrive, mais là je bloque
    malgré mes recherches...

    Alors voilà, j'ai une classe DocumentLibrary qui possède une collection de Document.

    Lorsque je modifie un document de la collection et que je mets à jour DocumentLibrary, ça fonctionne.
    Lorsque j'ajoute un nouveau document dans la collection et que je mets à jour DocumentLibrary, ça fonctionne.
    Lorsque je supprime un document de la collection et que je mets à jour DocumentLibrary, là ça ne fonctionne pas.

    Je voudrais que lorsque l'on supprime un Document de DocumentLibrary, la suppression soit répercutée lors de la mise à jour de DocumentLibrary.

    J'ai indiqué "orphanRemoval=true" mais cela ne fonctionne pas.

    Qu'ais-je oublié ?

    Voici ma classe DocumentLibrary (qui possède la collection) :
    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
    @Entity
    @Table(name="library")
    public class DocumentLibrary {
     
    	@Id
    	@Column(name="id")
    	private int id = 0;
     
    	@Column(name="nb_documents")
    	private int numberOfDocuments = 0;
     
    	@OneToMany(mappedBy="library", fetch=FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
    	private Set<AbstractDocument> documents;
     
    	//...
    }
    Voici ma classe test :
    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
    public class test {
    	public static void main(String[] args) throws Exception {
    		ApplicationContext appCtx = 
    			new ClassPathXmlApplicationContext("META-INF/spring/applicationContext-bean.xml");
     
    		DocumentLibraryImpl librarySvc = 
    			(DocumentLibraryImpl) appCtx.getBean("documentLibraryService");
     
    		// Chargement de la bibliothèque
    		DocumentLibrary library = librarySvc.loadDocumentLibraryByProject(1);
     
    		// Chargement des documents
    		librarySvc.loadAllDocuments(library);
     
    		// Suppression des documents
    		for (AbstractDocument doc : library.getDocuments()) {
    			library.removeDocument(doc);
    		}
     
    		// Mise à jour de la bibliothèque
    		librarySvc.saveDocumentLibrary(library);
    	}
     
    }

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut
    Personne ne peut me dire ce qui cloche dans mon code ???

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    // Suppression des documents for (AbstractDocument doc : library.getDocuments()) {
       doc.setParent(null);     <-- je ne sais pas comment s'appelle ta colonne de référencement
       library.removeDocument(doc); }...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut
    J'ai essayé mais ça ne donne rien :-(

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    D'après ce que j'ai lu sur le sujet, ça aurait dû...

    Sans JPA 2, je génère une requête pour supprimer tous les id primaires qui ne sont pas dans ma liste (et rattaché à l'élément bien sûr), c'est lourd, mais ça marche...

    Bon, je n'ai pas de JPA 2 sous la main, donc, je ne vais pas pouvoir aider plus, désolé...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut


    Bon je vais continuer mes recherches. Si entre temps des idées fusent, n'hésitez pas

  7. #7
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    IL faudrait voir le code de library.removeDocument(doc). Mais sinon tu peux tester library.getDocuments().remove(doc); car le Set implémenté par Hibernate doit gérer le remove et mettre à jour la base au moment du save ou du flush.

Discussions similaires

  1. JPA bloque lors de la mise à jour d'une date
    Par th3doct0r dans le forum JPA
    Réponses: 1
    Dernier message: 25/01/2013, 09h38
  2. Code lors de la mise à jour d'une cellule
    Par Prof_Matches dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2012, 12h07
  3. Réponses: 0
    Dernier message: 14/04/2010, 11h32
  4. [AC-2003] Erreur lors de la mise à jour d'une table SQL Server 2008
    Par suziwan dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/12/2009, 22h06

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