В книге «Сохранение Java с Hibernate» в разделе «Многозначные ассоциации» приведен пример, в котором родительский объект (Item) содержит список связанных объектов сущности (Bid).Пример приведен на странице 290 в моем издании.
<hibernate-mapping>
<class name="com.shane.Hibernate1.Item" table="Item">
<id name="ItemId" column="ItemId">
<generator class="increment"/>
</id>
<property name="Synopsis" column="Synopsis"/>
<list name="bids" cascade="save-update">
<key column ="ItemId" not-null="true"/>
<list-index column="Sequence"/>
<one-to-many class="com.shane.Hibernate1.Bid"/>
</list>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.shane.Hibernate1.Bid" table="Bid">
<id name="BidId" column="BidId">
<generator class="increment"/>
</id>
<property name="synopsis" column="Synopsis"/>
</class>
</hibernate-mapping>
Я попробовал следующее с NHibernate и 2.1.2.GA и 3.1.0.GA:
Item item = new Item();
item.setSynopsis("Item 1");
Bid bid = new Bid();
bid.setSynopsis("Bid1");
item.getBids().add(bid);
session.save(item);
NHibernate первые вставкисначала новая строка в Item затем пытается вставить строку в Bid, но завершается неудачно, так как не включает столбцы ItemId и Sequence, если в таблице установлены эти столбцы, не равные NULL.Если я сделаю эти столбцы обнуляемыми, это сработает, потому что затем они обновят Bid, чтобы установить их, но я не хочу, чтобы они обнулялись.
Я попробовал это с помощью Hibernate 3.1.rc2, и это работает - когдавставляет ли он все значения, но, как ни странно, он все равно обновляет ItemId и Sequence в таблице Bid.
Это ошибка в NHibernate?Я ожидаю, что такое поведение fo будет одинаковым как для версий java, так и для .Net.