Bonjour,
J'ai deux entités
Je n'ai pas de many-to-one de Person dans l'entité Address car étant donné que beaucoup d'entités ont une relation avec cette table je ne veux pas poluer l'entité Address avec pleins de many-to-one.
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 public class Person { .......................... @OneToMany(fetch = FetchType.EAGER, targetEntity = Address.class, cascade = CascadeType.ALL) @JoinColumn(name = "idforeign_add") public Set<Address> getAddresses() { return addresses; } ......................... } @Entity @Table(name = "address") public class Address { ................................. private int idaddress; //referenced address table primary key private int idforeign; //foreign key ................................. }
Quand je charge une entité Person, les adresses sont chargées grâce au fetch=eager.
Par contre si je modifie une instance de personne (pas forcément l'adresse)
et que je l'update il devrait mettre à jour la personne concernée et les adresses de cette personne grâce à cascade = CascadeType.ALL.
Il met à jour la table personne, la table adresse
par contre
il fait un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4update Address set idforeign = null where idforeign = ?
alors que juste avant il a fait un update Address en mettant le bon idForeign.
Quand on charge l'entité Person la collection d'Adress est dans un PersistentSet (objet hibernate) si je garde le persistentSet ça fonctionne il ne fera pas set idforeign = null.
Par contre si je recréé mon objet je suis obligé de faire une collection d'adresse dans un hashSet() (ne pouvant instancier un PersitentSet) et la j'ai ce problème du set idforeign = null.
J'ai aussi remarqué que pour une relation "normale" one-to-many d'un coté et many-to-one de l'autre avec le fetch=eager quand je fais l'update, que la collection soit une hashSet ou un persistentSet, ça fonctionne.
J'ai donc l'impression que dans mon cas Hibernate considère que j'ai supprimé les adresses de la personne concernée et fait donc un set idforeign = null pour casser la relation.
Est-ce que quelqu'un a une explication pour ce problème ?
Merci d'avance pour votre aide.
Partager