无法让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>
答案 0 :(得分:8)
这是映射它的正确方法:
<class name="tableA" table="tableA">
...
<many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>
unique
。从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
中记录了这一切答案 1 :(得分:-1)
当您还为同一个值定义一对一关系时,您不需要将属性指定为映射文件中的属性。我没有使用过一对一,所以可能还有另一个问题,但我会删除该行:
<property name="bID" column="bID" />
来自tableA的,看看是否有帮助。