1 votes

NHibernate - Composite-Id sur une relation - Lorsque l'ID du parent n'est pas le même composite

Supposons que je dispose des tables suivantes dans une base de données Oracle

Personne :
PersonId <- PK ID (int, from sequence)
PersonFirstNameID <-- int
PersonLastNameID <-- int
PersonSecurityID <-- int

Détails sur la personne
PersonFirstNameID -CompositeKey
PersonLastNameID -CompositeKey
PersonSecurityID -CompositeKey
PersonDetailKey
ValeurDétailPersonne
PersonDetailRisk

Je souhaite maintenant modéliser la relation one to many de Person à PersonDetails dans NHibernate.

Comment faire ? J'ai essayé de mettre en place un composant représentant l'Id composite et de l'introduire dans le one to many via la propriété ref, mais cela génère du SQL avec des colonnes dupliquées et provoque l'erreur suivante : System.ArgumentException : Identifier type mismatch ; Found : Expected :

La documentation de NHibernate ne parle que de faire cela quand l'Id composite est le même sur les deux.

Oui... Ce n'est pas le schéma de ma base de données, c'est une ancienne base de données et l'accès est très limité :(

0voto

Gary Myers Points 24819

Ce n'est pas très clair.

Pour qu'une relation de clé étrangère fonctionne, l'enfant doit référencer la clé primaire du parent. La structure des données suggère donc que la clé primaire de la personne est FirstNameId/lastNameid/securityid (et votre meilleure solution serait donc d'ignorer la colonne personid).

L'identifiant Person_Id est-il réellement la clé primaire (définie en tant que PK dans la base de données), ou la version de la clé primaire PERSON de la base de données est-elle en fait FirstNameId/lastNameid/securityid ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X