使用以下映射:
<class name="Adress" table="Adress" lazy="false">
<id name="Id" column="Id">
<generator class="native" />
</id>
<many-to-one name="Person" class="Person">
<column name="PersonId" />
</many-to-one>
</class>
<class name="Person" table="Person" lazy="false">
<id name="PersonId" column="PersonId">
<generator class="native" />
</id>
<property name="Name" column="Name" type="String" not-null="true" />
<set name="Adresses" lazy="true" inverse="true" cascade="save-update">
<key>
<column name="PersonId" />
</key>
<one-to-many class="Adress" />
</set>
</class>
我的问题是,当我设置Adrees.Person的新对象时 人,收集人。地址不会更新。
我应该更新要更新的关联的每个结束角色 两个都?
另一件事:如果我像这样手动更新Fk: Adress.PersonId它不会破坏或改变关联。这是 Nhibernte的行为?
提前感谢,我在等待您的经验
答案 0 :(得分:0)
person.Addresses不会自行更新。你应该这样做:
address.setPerson(person);
person.getAddresses().add(address);
或者,因为在您的示例中Person.Addresses标记为inverse =“true”,您只能执行
address.setPerson(person);
然后刷新会话并从数据库中获取同一个人。应使用新地址更新其地址集合。
这篇文章(http://simoes.org/docs/hibernate-2.1/155.html)非常好地描述了'逆'属性。这篇文章是针对Hibernate而不是NHibernate,但我相信这并不重要。