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 :

Collections d'objet non rafraîchie après une suppression


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut Collections d'objet non rafraîchie après une suppression
    Bonsoir,

    bien que ce problème ait été rencontré quelque fois déjà, je n'ai pas réussi à trouver de solution à mon problème.
    Cela paraît simple mais ça ne l'est pas

    Le problème a lieu lors du rafraîchissement des données après avoir effectué une suppression.

    Je vous explique :

    1) les données (cf. "msr" pour mesures) sont chargées sur un écran en utilisant le bout de code suivant :

    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
     
     
            Criteria preparationPhasesCriteria = this.session.createCriteria(PreparationPhases.class);
            preparationPhasesCriteria.createAlias("prpConstructionSite", "cs", JoinType.INNER_JOIN);
            preparationPhasesCriteria.addOrder(Order.asc(PreparationPhases.PRP_NUMBER));
            java.util.List preparationPhases = preparationPhasesCriteria.list();
     
            for (int i = 0; i < preparationPhases.size(); i++) C
     
                PreparationPhases preparationPhase = (PreparationPhases)preparationPhases.get(i);
     
                 // Je rafraîchis mon entité preparationPhase
                 this.session.refresh(preparationPhase);
     
                 // Je parcours la collection des objets "Msrs" rattachés (2 éléments dans mon exemple)
                 for (Msrs msr : preparationPhase.getMsrs()) {
                     [ j'affiche mes données ]
                 }
     
                 [...]
            }
    2) Je supprime un enregistrement Msrs de ma phase de travail après avoir ouvert une transaction et effectué un commit.
    Le changement est bien effectué côté base de données.

    3) Lorsque je recharge mon écran, on attend à ce que la collection renvoyée par preparationPhase.getMsrs() ne contienne plus qu'1 élément.
    Mais lors du refresh avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.session.refresh(preparationPhase)
    , ma collection n'est pas rafraîchie et l'exception Hibernate est remontée : "org.hibernate.UnresolvableObjectException: No row with the given identifier exists".
    Cette exception survient car Hibernate n'a pas réussi à trouver l'élément effacé précédemment.

    Petites précisions :
    - lorsque un enregistrement Msrs est ajouté, le refresh sur "preparationPhase" remonte bien un élément de plus dans la collection renvoyée par preparationPhase.getMsrs() .
    - Voici le code de mon modèle JPA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private Set<Msrs> msrs;
     
        @OneToMany(fetch = FetchType.LAZY, mappedBy = "msrPreparationPhase",
                   cascade={CascadeType.REFRESH, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REMOVE})
        public Set<Msrs> getMsrs() {
     
            return this.msrs;
        }
    Avez-vous une piste à me suggérer ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Points : 66
    Points
    66
    Par défaut
    Il me semblait avoir tout essayé... mais en faisant un simple clear de la session avant d'effectuer la requête cela fonctionne.

    Le secret :
    C'était pas si compliqué

    J'espère que cela pourra être utile à celui qui rencontrera un jour ce problème.

    berni.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2008, 22h17
  2. Réponses: 1
    Dernier message: 17/11/2007, 21h55
  3. Changer la valeur ID après une suppression
    Par VFone dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2007, 20h15
  4. Réoganiser l'autoincrementation apres une suppression
    Par agur29 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/08/2007, 17h51
  5. [PHP/CSS] liens vus->non vus apres une MAJ
    Par epoz dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 16h08

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