3

こんにちは、私は Nhibernate の初心者で、次のように説明されているプロジェクトに取り組んでいます。

ParentName と IList を使用する 1 対多の ChildrenList を含む 1 つの「Parents」テーブル、主キーを ParentId に設定

キーの 1 つとして ParentID を含む複合主キーを持つ 1 つの「子」テーブル

だから私はこのようにParents.hbm.xmlに1対多を設定しました

<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 メソッドを使用して、子のリストを含む親オブジェクトを MySQL データベースに保存するテストを行っていますが、常に失敗し、「子オブジェクトを挿入できません」とだけ言われました。

ここに私のテストコードがあります:

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

私は 1 つの親から多くの子までをテストしました。子の主キーは、生成された ChildrenId に設定されています。これはうまくいきます。しかし、どういうわけか、複合キーを使用してそれを行うことはできません。私の推測では、Children の ParentName は主キーですが、Parent の ParentName が入力された後にのみ入力されます。

別の質問は、上記の問題が解決された場合、これを使用して、子リストを含む親オブジェクト全体を取得できますか? (単純な単一のPKケースで試しましたが、子が複合キーの場合は機能しないようです)

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

ありがとう!

4

0 に答える 0