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 ?