【发布时间】:2014-05-06 11:50:48
【问题描述】:
我有两个这样声明的实体(非常简化):
public Test1 {
public virtual int Id {get;set;}
public virtual ICollection<Test2> Childs {get;set;}
}
public Test2 {
public virtual int Id {get;set;}
public virtual Test1 Parent {get;set;}
public virtual string Name {get;set;}
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test" assembly="Test">
<class name="Test1" table="test1">
<id name="Id" column="id_parent">
<generator class="native" />
</id>
<set name="Childs" table="test2" cascade="save-update" batch-size="10" inverse="true">
<key column="id_parent" not-null="true"/>
<one-to-many class="Test.Test2, Test" />
</set>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test" assembly="Test">
<class name="Test2" table="test2">
<id name="Id" column="id_child">
<generator class="native" />
</id>
<many-to-one name="Parent" column="id_parent" class="Test.Test1, Test" />
<property name="Name" column="name" />
</class>
</hibernate-mapping>
现在我想更改(第一个)孩子的 name 属性:
var entities = Session.CreateCriteria<Test1>().List<Test1>();
var tx = Session.BeginTransaction();
foreach (Test1 entity in entities)
{
entity.Childs.First().Name = "blabla";
Session.Update(entity);
}
tx.Commit();
但这不起作用。我可以在 NhProf 中看到该事务已启动,该 sql 被触发用于获取父记录,另一个用于获取子记录。但是没有为更新 name 属性触发 sql。我究竟做错了什么?我在阅读文档时尝试了不同的方法,但没有成功。
非常感谢!
【问题讨论】:
-
尝试在foreach之后调用session.flush...
-
提交不会刷新更改吗?我也尝试在 foreach 之后进行冲洗,但没有成功。
标签: hibernate nhibernate nhibernate-mapping hibernate-mapping