我有一个名为MyItem的对象,它引用同一项目中的子对象。如何设置nhibernate映射文件来存储此项?
public class MyItem
{
public virtual string Id {get;set;}
public virtual string Name {get;set;}
public virtual string Version {get;set;}
public virtual IList<MyItem> Children {get;set;}
}
所以粗略的hbm.xml将是:
<class name="MyItem" table="tb_myitem">
<id name="Id" column="id" type="String" length="32">
<generator class="uuid.hex" />
</id>
<property name="Name" column="name" />
<property name="Version" column="version" />
<bag name="Children" cascade="all-delete-orphan" lazy="false">
<key column="children_id" />
<one-to-many class="MyItem" not-found="ignore"/>
</bag>
</class>
这不行,我不认为。也许我需要创建另一个类,比如MyItemChildren并将其用作Children成员,然后在该类中进行映射?
这意味着有两张桌子。一个表包含MyItem,另一个表包含我的项目的引用。注意:子项可能有很多父母。
答案 0 :(得分:0)
我的工作是急切地加载对象。
我可以加载'MyItem'对象,也可以加载子对象(Dependent)'MyItem'对象。
以下是我的C#类
using Iesi.Collections.Generic;
namespace Sample
{
public class MyItem
{
public virtual string Id { get; set; }
public virtual string Name { get; set; }
public virtual string Version { get; set; }
public virtual ISet<MyItem> Dependants { get; set; }
}
}
受抚养人是依赖父母的子女集合。每个MyItem都有许多MyItem孩子。这些存储在IESI ISet&lt;&gt;。
中hibernate映射文件是:
<class name="Sample.MyItem, Sample" table="myitem">
<id name="Id" column="id" type="String" length="32">
<generator class="uuid.hex" />
</id>
<property name="Name" column="name" type="String" length="80"/>
<property name="Version" column="version" type="String" length="25"/>
<set name="Dependants" table="myitemhierarchy" >
<key column="parentid" />
<many-to-many class="Sample.MyItem, Sample" column="childid" />
</set>
</class>