【发布时间】:2011-04-02 08:29:10
【问题描述】:
在 Java Persistence with 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 列设置为不为空,则它不包括 ItemId 和 Sequence 列,因此失败。如果我使这些列可以为空,它会起作用,因为它会更新 Bid 以设置它们,但我不希望它们可以为空。
我使用 Hibernate 3.1.rc2 进行了尝试,它可以工作 - 当它进行插入时,它会提供所有值,但奇怪的是,之后它仍然会更新 Bid 表上的 ItemId 和 Sequence。
这是 NHibernate 中的错误吗?我希望这种 fo 行为对于 java 和 .Net 版本都是相同的。
【问题讨论】:
标签: java .net hibernate nhibernate