nhibernate中使用复合键的自反n:m关系
我有一个包含3个表的旧数据库,如下所示:nhibernate中使用复合键的自反n:m关系,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有一个包含3个表的旧数据库,如下所示: (来源:) “项目”表包含计划中的所有项目。 结构表定义了项目之间的关系。 父项由表结构的公司、年度、计划id和父项映射到公司、年度、计划id表项定义 子项由表结构的映射到公司,年,计划id和子项定义,映射到表项目的年,计划id 我正在寻找一种使用hbm或fluent映射在nhibernate中进行n:m映射的方法 我想到了: <?xml version="1.0" encoding="utf-8"?> <hibernate-mapp
(来源:) “项目”表包含计划中的所有项目。 结构表定义了项目之间的关系。 父项由表
结构的公司
、年度
、计划id
和父项
映射到公司
、年度
、计划id
表项
定义
子项由表结构的映射到公司,年,计划id
和子项定义,映射到表项目的年,计划id
我正在寻找一种使用hbm或fluent映射在nhibernate中进行n:m映射的方法
我想到了:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping namespace="Project.Model" assembly="Project" xmlns="urn:nhibernate-mapping-2.2">
<class name="Item" lazy="true" table="`item`" schema="`dbo`">
<composite-id>
<key-property name="Company" column="`company`" />
<key-property name="Year" column="`year`" />
<key-property name="Planid" column="`planid`" />
<key-property name="ItemId" column="`id`" />
</composite-id>
<!-- Some other properties -->
<set name="Parents" table="`structure`" fetch="select">
<key>
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`parentItem`" />
</key>
<many-to-many class="Item">
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`id`" />
</many-to-many>
</set>
<set name="Childs" table="`structure`" fetch="select">
<key>
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`childItem`" />
</key>
<many-to-many class="Item">
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`id`" />
</many-to-many>
</set>
<many-to-one name="Plan" class="Plan" not-null="true" fetch="select">
<column name="`company`" />
<column name="`planid`" />
</many-to-one>
</class>
</hibernate-mapping>
但是错误是:映射中的重复列…
-所以我被卡住了。有什么建议吗?我设法解决了这个问题。关键是使用键多对一(FluentNHibernate中的键引用)和not来进行n:m映射(因为它不起作用!):
这看起来有点奇怪,尤其是公司、年份和计划在结构中的关键部分。但它很有效…我设法解决了这个问题。关键是使用键多对一(FluentNHibernate中的键引用)和not来进行n:m映射(因为它不起作用!):
这看起来有点奇怪,尤其是公司、年份和计划在结构中的关键部分。但它是有效的
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping namespace="Project.Model" assembly="Project" xmlns="urn:nhibernate-mapping-2.2">
<class name="Item" lazy="true" table="`item`" schema="`dbo`">
<composite-id>
<key-many-to-one name="Plan" class="Plan">
<column name="Company" column="`company`" />
<column name="Planid" column="`planid`" />
</key-many-to-one>
<key-property name="Year" column="`year`" />
<key-property name="ItemId" column="`id`" />
</composite-id>
<!-- Some other properties -->
<set name="Parents" table="`structure`" fetch="select">
<key>
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`parentItem`" />
</key>
<many-to-many class="Item">
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`id`" />
</many-to-many>
</set>
<set name="Childs" table="`structure`" fetch="select">
<key>
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`childItem`" />
</key>
<many-to-many class="Item">
<column name="`company`" />
<column name="`year`" />
<column name="`planid`" />
<column name="`id`" />
</many-to-many>
</set>
</class>
<class name="Structure" lazy="true" table="`item`" schema="`dbo`">
<composite-id>
<key-many-to-one name="Parent" class="Item">
<column name="company" />
<column name="year" />
<column name="planid" />
<column name="parentItem" />
</key-many-to-one>
<key-many-to-one name="Child" class="Item">
<column name="company" />
<column name="year" />
<column name="planid" />
<column name="childItem" />
</key-many-to-one>
<key-property name="StructureId" column="structureId" />
</composite-id>
</class>
</hibernate-mapping>