我們有一個遺留的數據庫模式,我嘗試過(不成功)用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」,是有不同的方式來實現這一目標(不改變數據庫模式),還是我剛剛在我的地圖文件中犯了一個初學者的錯誤?
您是否在Person2連接表元素中放置了多對多的房屋映射? – 2009-05-20 17:08:54