2009-05-20 87 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> 
相關問題