私のクラス:
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> Children { get; set; }
/* other properties */
}
public class Child
{
public virtual int Id { get; set; }
public virtual Parent Mother { get; set; }
public virtual int ItemNumber { get; set; }
public virtual string Remarks { get; set; }
/* other properties */
}
私のデータベース:
PARENTS(ID, NAME, ...) -> PRIMARY KEY = ID
CHILDREN (C_ID, MOTHER_ID, ITEM_NO, REMARKS ....) -> PRIMARY KEY = c_ID
Hibernate マッピング:
<class name="Parent" table="PARENTS">
<id name="Id" column="ID">
<generator class="increment" />
</id>
<property name="Name" column="NAME"/>
<list name="Children" cascade="all" inverse="true">
<key column="MOTHER_ID" not-null="true" />
<list-index base="1" column="ITEM_NO"/>
<one-to-many class="Child" />
</list>
</class>
<class name="Child" table="CHILDREN">
<id name="Id" column="C_ID">
<generator class="increment" />
</id>
<many-to-one name="Mother" class="Parent" column="MOTHER_ID" />
<property name="ItemNumber" column="ITEM_NO"/>
<property name="Remarks" column="REMARKS"/>
</class>
私のコード:
Parent p = new Parent();
//set parent properties here
Child c = new Child();
//set child properties here
p.Children.add(c);
c.Mother = p;
//Save parent
質問:
上記のコードは、親とすべての子をそれぞれのテーブルに保存します。ただし、すべての子の項目 ITEM_NO のデフォルト値はゼロです。特定の親の子ごとに 1 から始まる徐々に増加する値を ITEM_NO に自動的に割り当てるのに役立つマッピングはありますか? つまり、ITEM_NO のシーケンスは、1 から各親の子の数まで繰り返す必要があります。
NB: Child は独立したエンティティである必要があるため、親を介する必要がなくてもクエリを実行できるはずです。