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