Mapping tricky entre 4 tables [Résolu][Hibernate] - Java - Programmation
MarshPosté le 30-09-2009 à 10:37:42
Bonjour à tous,
J'ai une chouette (sic) appli a reprendre de PHP vers Java, tout ça sans toucher à la base de données. Ca poserait moins de problèmes si la base était correcte. D'où mon problème :
Voilà un bout du schéma du schéma :
[Rôle] ^ | | | V [User]<--------------->[UserEntity]<--------------->[Entity] (char (1) mail)
J'ai donc une table de jointure entre trois autres tables qui me permet de connaitre le rôle d'un utilisateur sur une entité. Mais cette table me dit aussi si je doit envoyer en mail ou pas à l'utilisateur sur modification de l'entité.
Dans la table UserEntity, je me retrouve donc avec 4 champs, donc 3 font partie de la clef.
Si il n'y avait pas eu le mail, dans les entités j'aurai mappé autant de listes d'utilisateurs que de rôles (table fixe). Malheureusement le mail est là, et m'a (semble-t-il) forcé à avoir un objet UserEntity La génération auto hibernate m'a fait un objet avec un Id complexe et tous les champs :
private Set<UserEntity> userEntities = new HashSet<UserEntity>(0);
}
Et avec ça, quand j'essaie de mettre à jour la liste des userEntity de mon entité, hibernate me génère ce code :
Code :
UPDATE userEntity SET FK_entity=NULLWHERE FK_entity=? AND FK_IDENT=? AND FK_entity=? AND FK_ROLE=?
avec
Code :
2009-09-30 10:03:18 TRACE [org.hibernate.type.IntegerType nullSafeSet(l:151)] binding '140381' to parameter: 1
2009-09-30 10:03:18 TRACE [org.hibernate.type.StringType nullSafeSet(l:151)] binding 'IFBU6444' to parameter: 2
2009-09-30 10:03:18 TRACE [org.hibernate.type.IntegerType nullSafeSet(l:151)] binding '140381' to parameter: 3
2009-09-30 10:03:18 TRACE [org.hibernate.type.IntegerType nullSafeSet(l:151)] binding '1' to parameter: 4
donc la grande question (enfin) pourquoi il essaye de me mettre un NULL, alors que j'ai une vrai valeur à setter ? pourquoi l'entité est deux fois dans la requête ??
Mon mapping pue, j'en doute pas une seconde. Des idées pour l'améliorer ?
Message édité par brisssou le 30-09-2009 à 15:33:05
--------------- HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Marsh Posté le 30-09-2009 à 10:37:42
Bonjour à tous,
J'ai une chouette (sic) appli a reprendre de PHP vers Java, tout ça sans toucher à la base de données. Ca poserait moins de problèmes si la base était correcte. D'où mon problème :
Voilà un bout du schéma du schéma :
[Rôle]
^
|
|
|
V
[User]<--------------->[UserEntity]<--------------->[Entity]
(char (1) mail)
J'ai donc une table de jointure entre trois autres tables qui me permet de connaitre le rôle d'un utilisateur sur une entité. Mais cette table me dit aussi si je doit envoyer en mail ou pas à l'utilisateur sur modification de l'entité.
Dans la table UserEntity, je me retrouve donc avec 4 champs, donc 3 font partie de la clef.
Si il n'y avait pas eu le mail, dans les entités j'aurai mappé autant de listes d'utilisateurs que de rôles (table fixe). Malheureusement le mail est là, et m'a (semble-t-il) forcé à avoir un objet UserEntity La génération auto hibernate m'a fait un objet avec un Id complexe et tous les champs :
On continue avec le mapping de Entity :
Et avec ça, quand j'essaie de mettre à jour la liste des userEntity de mon entité, hibernate me génère ce code :
avec
donc la grande question (enfin)
pourquoi il essaye de me mettre un NULL, alors que j'ai une vrai valeur à setter ?
pourquoi l'entité est deux fois dans la requête ??
Mon mapping pue, j'en doute pas une seconde. Des idées pour l'améliorer ?
Message édité par brisssou le 30-09-2009 à 15:33:05
---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris