Nhibernate外键作为复合键

时间:2010-08-09 10:14:24

标签: composite-primary-key

您好我是Nhibernate的新手,我正在开发一个项目,描述如下:

包含ParentName的1个“Parents”表和使用IList的一对多ChildrenList,其中Primary Key设置为ParentId

1“Children”表,其中包含一个复合主键,其中包含ParentID作为键

之一

所以我在Parents.hbm.xml中设置了一对一,如此

<class name="ParentName " table="Parents">
<id name="ParentName " column="ParentName ">
<generator class="assigned"/>
</id>
<property name="ParentAlpha" />
<bag name="ChildrenList" cascade="all">
<key column="ParentName" />
<one-to-many class="Children"/>
</bag>

和这样的Children.hbm.xml

<composite-id>
<key-many-to-one name="ParentName" class="Parent"/>
<key-property name = "ChildrenAlpha" />
<key-property name = "ChildrenAlpha2"/>
</composite-id>
<property name="ChildrenBeta" />
<property name="ChildrenGama" />

目前我正在使用session.SaveOrUpdate方法对使用一些Child列表将父obj保存到MySQL数据库进行测试,但它始终失败并且只是说“无法插入”子Obj

这是我的测试代码:

Parent parent = new Parent(){ParentAlpha= "ABC"};
Children children = new Children(){ChildrenAlpha = "AAA" ,ChildrenAlpha2 ="VBB"};
parent .ChildrenList.add(children); //IList add function
.....session.SaveOrUpdate(parent);

我已经为多个孩子测试了一个父级,并且子级主键设置为生成的ChildrenId。这很好用。但不知怎的,我不能使用复合键来做,我的猜测是,因为Children中的ParentName是主键,但只有在Parent中的ParentName被填充之后才会被填充,就像那样。

另一个问题是,如果上述问题得到解决,我是否可以使用它来检索带有子列表的整个父obj? (我尝试过简单的单个PK案例,但是当孩子是一个复合关键的东西时似乎不起作用)

Parent parent= session.CreateCriteria(typeof(Parent))
                    .Add(Restrictions.Eq("ParentName", ParentName))
                    .UniqueResult<Parent>();
NHibernateUtil.Initialize(parent.ChildrenList);

谢谢!

0 个答案:

没有答案