关于集合中Fk引用的问题

时间:2010-06-07 09:58:18

标签: .net nhibernate collections associations

我有2个实体:(人)& (地址)

使用以下映射:

 <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的行为?

提前感谢,我在等待您的经验

1 个答案:

答案 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,但我相信这并不重要。