无法让NHibernate生成正确的查询。它一直使用我要加入的两个表的主键进行一对一关系,而且我不知道如何在其中一个表中指定外键。

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

因此tableA应该使用tableA.bID = tableB.bID加入tableB。如何在tableA的映射中指定此内容?我正在使用tableA类从tableA检索一行并从tableB检索一行,因为它是真正的一对一关系。

NHibernate使用tableA.aID = tableB.bID生成连接表的SQL,这是错误的。

这不起作用:
<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>

最佳答案

这是映射它的正确方法:

<class name="tableA" table="tableA">
  ...
  <many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>
  • 我假设这实际上是一对一的,因此是unique
  • 您应该一次映射每列。如果是关系,那么它不是int属性。

  • 从tableB到tableA的引用将实现为:
    <class name="tableB" table="tableB">
      ...
      <one-to-one name="A" class="tableA" property-ref="otherThing" />
    </class>
    

    这全部记录在http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-onetoone

    关于NHibernate一对一映射,非主键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3873808/

    10-11 22:29
    查看更多