내 코드는 다음과 같습니다.NHibernate one-to-many 매핑 : 자식 항목 삽입 문제
Order order = new Order { ... };
OrderItem item = new OrderItem { ... };
order.Items.Add(item);
item.Order = order;
using(var tran = session.BeginTransaction()) {
session.Save(order);
// Without this, an exception will be thrown: Unexpected row count: 0; expected: 1
// session.Save(item);
tran.Commit();
}
session.Save(item)
줄의 주석을 제거하면 해당 순서와 해당 항목이 삽입됩니다. 그렇지 않으면 "예기치 않은 행 수 : 0, 예상 : 1"예외가 발생합니다.
많은 끝 (Items 속성)을 inverse = "true"로 표시하면 아무 예외도 발생하지 않지만 Order 만 삽입합니다! 주문 항목은 DB에 삽입되지 않습니다.
session.Save(order)
를 호출하지 않고 session.Save(item)
을 호출하면 순서와 항목이 모두 삽입됩니다.
어떻게 session.Save(orderItem)
를 호출하지 않고 session.Save(order)
만 호출하여 주문과 주문 항목을 저장할 수 있습니까? 감사!
다음은 내 매핑입니다.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core" assembly="Core">
<class name="Order" table="[Order]">
<id name="Id">
<generator class="assigned" />
</id>
<property name="Name" />
<bag name="Items">
<key column="CategoryId" />
<one-to-many class="Core.OrderItem, Core"/>
</bag>
</class>
<class name="OrderItem">
<id name="Id">
<generator class="assigned" />
</id>
<property name="Title" />
<many-to-one name="Order" column="OrderId" cascade="save-update" not-null="true" />
</class>
</hibernate-mapping>
감사합니다! 나는 "캐스케이드"속성을 잘못된 위치에 추가합니다! :( –