2009-05-20 92 views
1

我们有一个遗留的数据库模式,我尝试过(不成功)用NHibernate进行映射。为了给出一个简化的例子,说我想要一个名字来自“Person”表的Person类,但他们的姓氏来自“Person2”表。 “Person”表中还有该人的Car的Id,并且我希望我的Person类具有Car属性。我可以使用以下内容映射所有内容:我可以将两个表“连接”到一个类中,同时使用NHibernate创建多对一的关系吗?

<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:#42S22Unknown列“字段列表”

是NHibernate的能够做什么,我试图“HouseId”,是有不同的方式来实现这一目标(不改变数据库模式),还是我刚刚在我的地图文件中犯了一个初学者的错误?

+0

您是否在Person2连接表元素中放置了多对多的房屋映射? – 2009-05-20 17:08:54

回答

1

文森特 - 感谢您的回复。不,我不是在标签内嵌入元素。但是,按照你的建议,我尝试了,它完美的工作!非常感谢您的回复。

<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> 
相关问题