Question

Impossible d'obtenir NHibernate pour générer la requête correcte. Il continue d'utiliser les clés primaires des deux tables, je me joins à une à une relation, et je ne peux pas comprendre comment spécifier la clé étrangère dans l'une des tables.

tableA      tableB
{ aID,      { bID,
  bID,        z,
  c,          y,
  d }         x }

le tableA devrait se joindre à l'aide tableB tableA.bID = tableB.bID. Comment puis-je le préciser dans le mappage pour tableA? J'utilise la classe tableA pour récupérer une ligne de tableA et une rangée de tableB, car il est un véritable relation biunivoque.

NHibernate génère le code SQL pour joindre les tables à l'aide tableA.aID = tableB.bID, ce qui est faux.

Cela ne fonctionne pas:

<class name="tableA" table="tableA">
  <id name="aID" column="aID" />
  <property name="bID" column="bID" />
  <property name="c" column="c" />
  <property name="d" column="d" />
  <one-to-one name="otherThing" class="tableB" foreign-key="bID" />
</class>

<class name="tableB" table="tableB">
  <id name="bID" column="bID" />
  <property name="z" column="z" />
  <property name="y" column="y" />
  <property name="x" column="x" />
</class>
Était-ce utile?

La solution

Ceci est la bonne façon de mapper:

<class name="tableA" table="tableA">
  ...
  <many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>
  • Je suppose que cela est vraiment un à un, d'où le unique.
  • Vous devriez mapper chaque colonne UNE FOIS. Si c'est une relation, alors ce n'est pas une propriété int.

serait mis en oeuvre Une référence de tableB à tableA comme:

<class name="tableB" table="tableB">
  ...
  <one-to-one name="A" class="tableA" property-ref="otherThing" />
</class>

Tout cela est documenté dans http: // NHibernate. info / doc / nh / fr / index.html # mapping-déclaration-onetoone

Autres conseils

Vous ne devriez pas besoin de spécifier la propriété comme une propriété dans votre fichier de mappage lorsque vous définissez également une à une relation pour la même valeur. Je ne l'ai pas utilisé un à un, donc il peut y avoir une autre question, mais je supprimer la ligne:

<property name="bID" column="bID" /> 

de tableA et voir si cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top