Bonjour,
Nous rencontrons un problème auquel nous ne trouvons pas de solution.
Soit un Beneficiaire ayant un set de RessourceRGAL :
Pour le mapping, c'est une relation One-To-Many :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class Beneficiaire extends BaseBean { ... private Set<RessourceRGAL> lesRessourceRGAL = new HashSet<RessourceRGAL>(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <hibernate-mapping package="bean.beneficiaire" default-lazy="true" default-cascade="none"> <class optimistic-lock="version" table="beneficiaire_bene" name="Beneficiaire"> ... <set name="lesRessourceRGAL" table="ressourcergal_rrga"> <key foreign-key="fk_rrga_bene_1" > <column name="bene_id_lesressourcergal" index="in_rrga_5" not-null="false" ></column> </key> <one-to-many class="bean.RessourceRGAL" /> </set>
Lorsque nous lisons la collection, nous appliquons une ou plusieurs restrictions, par exemple pour ne lire que les "lesRessourceRGAL" d'une année particulière.
Du coup, la collection n'est pas complète.
Dans le cas où on n'a lu que 2018 et que la collection ne comporte qu'un seul objet :
- si on supprime cet objet de la collection : unBeneficiaire.getlesRessourceRGAL().remove(unRessourceRGAL)
- et qu'on synchronise le base : saveorupdate(unBeneficiaire)
==> Hibernate va générer le sql suivant :
Du coup, les RessourceRGAL des années précédentes seront orphelines.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6update ressourcergal_rrga set bene_id_lesressourcergal=null where bene_id_lesressourcergal=?
Le même problème se pose la lecture initiale ne retourne rien :
Car alors on fait un : unBeneficiaire.setLesRessourceRGAL(new HashSet<RessourceRGAL>());
Si ensuite on synchronise le base : saveorupdate(unBeneficiaire)
Hibernate va générer le même sql que ci-dessus.
Il y a t-il une solution ?
Merci pour vos lumières!
Cordialement,
Thomas
Partager