NHibernate一对一映射,非主键

NHibernate一对一映射,非主键,nhibernate,mapping,key,one-to-one,Nhibernate,Mapping,Key,One To One,无法让NHibernate生成正确的查询。它一直使用我连接的两个表的主键来实现一对一的关系,我不知道如何在其中一个表中指定外键 tableA tableB { aID, { bID, bID, z, c, y, d } x } 因此,tableA应该使用tableA.bID=tableB.bID连接到tableB。我如何在表A的映射中指定这一点?我使用tableA类从tableA检索一行,从tableB检索一行,因

无法让NHibernate生成正确的查询。它一直使用我连接的两个表的主键来实现一对一的关系,我不知道如何在其中一个表中指定外键

tableA      tableB
{ aID,      { bID,
  bID,        z,
  c,          y,
  d }         x }
因此,tableA应该使用tableA.bID=tableB.bID连接到tableB。我如何在表A的映射中指定这一点?我使用tableA类从tableA检索一行,从tableB检索一行,因为这是一个真正的一对一关系

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

这不起作用:

<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>

在为同一个值定义一对一关系时,不需要在映射文件中将属性指定为属性。我没有使用一对一,因此可能存在另一个问题,但我会删除该行:

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


从表A中查看是否有帮助。

这是绘制地图的正确方法:

<class name="tableA" table="tableA">
  ...
  <many-to-one name="otherThing" class="tableB" column="bID" unique="true" />
</class>

这些都记录在

中,没有什么不同,我也不知道为什么会有不同。两个表都有该列,两个映射都应该有这些属性,值得一试。我发现像那样的东西有一些奇怪的副作用,所以我想我应该把它扔出去。谢谢。成功了。令人困惑的是,我不得不使用多对一元素,而实际上它是一对一的映射。我还将fetch类型设置为“join”,这样可以减少查询的数量。但是,如果您可以展示一个双向示例,这将是一个很有教育意义的示例。
<class name="tableB" table="tableB">
  ...
  <one-to-one name="A" class="tableA" property-ref="otherThing" />
</class>