正如Matthieu所说,唯一不想设置inverse = true的情况是,孩子对自己负责更新本身是没有意义的,例如孩子不了解其父母。
让我们尝试一个现实世界,而不是完全没有人为的示例:
<class name="SpyMaster" table="SpyMaster" lazy="true"> <id name="Id"> <generator /> </id> <property name="Name"/> <set name="Spies" table="Spy" cascade="save-update"> <key column="SpyMasterId"/> <one-to-many /> </set></class><class name="Spy" table="Spy" lazy="true"> <id name="Id"> <generator /> </id> <property name="Name"/></class>
间谍主管可以有间谍,但间谍永远不知道自己的间谍主管是谁,因为我们没有在间谍类中包括多对一关系。同样(方便地),间谍可能会变成流氓,因此不需要与间谍主管关联。我们可以如下创建实体:
var sm = new SpyMaster{ Name = "Head of Operation Treadstone"};sm.Spies.Add(new Spy{ Name = "Bourne", //SpyMaster = sm // Can't do this});session.Save(sm);在这种情况下,您可以将FK列设置为可空值,因为保存sm的操作会插入SpyMaster表和Spy表中,只有在此之后,它才会更新Spy表以设置FK。在这种情况下,如果我们将inverse
= true设置为FK,则永远不会更新。



