我可以吗;加入;将两个表合并到一个类中,同时使用NHibernate创建多对一关系?

我可以吗;加入;将两个表合并到一个类中,同时使用NHibernate创建多对一关系?,nhibernate,Nhibernate,我们有一个遗留的数据库模式,我尝试用NHibernate映射它(没有成功)。举一个简单的例子,假设我想要一个Person类,它的名字来自“Person”表,但姓氏来自“Person2”表。“Person”表也有这个人的汽车Id,我希望我的Person类有一个汽车属性。我可以使用以下方法绘制所有这些地图: <hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2" auto-impor

我们有一个遗留的数据库模式,我尝试用NHibernate映射它(没有成功)。举一个简单的例子,假设我想要一个Person类,它的名字来自“Person”表,但姓氏来自“Person2”表。“Person”表也有这个人的汽车Id,我希望我的Person类有一个汽车属性。我可以使用以下方法绘制所有这些地图:

<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="NHibernateMappingTest.Person, NHibernateMappingTest" lazy="false">
    <id name="Id" >
      <generator class="native" />
    </id>
    <property name="FirstName" />
    <many-to-one name="Car" access="property" class="NHibernateMappingTest.Car, NHibernateMappingTest" column="CarId"  cascade="save-update"/>
    <join table="Person2">
      <key column="PersonId" />
      <property name="LastName" />
    </join>
  </class>
</hibernate-mapping>

让我把Person和Person2表结合起来,让我找到他们的车——一切都很好

但是。。。如果Person2表碰巧有这个人的HouseId,我希望能够向映射中添加第二个元素

<many-to-one name="House" access="property" class="NHibernateMappingTest.House, NHibernateMappingTest" column="HouseId" cascade="save-update"/>

…这样我的个人阶级就可以拥有房产

然而这就是问题所在,因为NHibernate生成的SQL假设HouseId列在Person表中(但不是,它在Person2中),所以我得到以下错误:

MySql.Data.MySqlClient.MySqlException:#42s22“字段列表”中的未知列“HouseId”


NHibernate是否能够完成我正在尝试的工作,是否有其他方法来实现这一点(不更改数据库模式),或者我只是在地图文件中犯了一个初学者错误?

Vincent-感谢您的回复。不,我没有在元素中嵌套tag元素。但是按照你的建议,我试过了,效果非常好!非常感谢您的回复

<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
      <class name="NHibernateMappingTest.Person, NHibernateMappingTest" lazy="false">
        <id name="Id" >
          <generator class="native" />
        </id>
        <property name="FirstName" />
        <many-to-one name="Car" access="property" class="NHibernateMappingTest.Car, NHibernateMappingTest" column="CarId"  cascade="save-update"/>
        <join table="Person2">
          <key column="PersonId" />
          <property name="LastName" />
          <many-to-one name="House" access="property" class="NHibernateMappingTest.House, NHibernateMappingTest" column="HouseId" cascade="save-update"/>
        </join>
      </class>
    </hibernate-mapping>

文森特-感谢您的回复。不,我没有在元素中嵌套tag元素。但是按照你的建议,我试过了,效果非常好!非常感谢您的回复

<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
      <class name="NHibernateMappingTest.Person, NHibernateMappingTest" lazy="false">
        <id name="Id" >
          <generator class="native" />
        </id>
        <property name="FirstName" />
        <many-to-one name="Car" access="property" class="NHibernateMappingTest.Car, NHibernateMappingTest" column="CarId"  cascade="save-update"/>
        <join table="Person2">
          <key column="PersonId" />
          <property name="LastName" />
          <many-to-one name="House" access="property" class="NHibernateMappingTest.House, NHibernateMappingTest" column="HouseId" cascade="save-update"/>
        </join>
      </class>
    </hibernate-mapping>


是否将多对多房屋映射放置在Person2联接表元素内?是否将多对多房屋映射放置在Person2联接表元素内?