Nhibernate 如何自动删除多对多关联(级联)

Nhibernate 如何自动删除多对多关联(级联),nhibernate,many-to-many,nhibernate-mapping,cascade,Nhibernate,Many To Many,Nhibernate Mapping,Cascade,在我的数据库中,我得到了具有多对多关系的用户和用户组。用户有一组UserGroup,UserGroup域对象看不到该用户 <class name="User" table="UserTable"> <set name="UserGroup" cascade="save-update" access="field.pascalcase-underscore" table="User2UserGroup"> <key column="User_I

在我的数据库中,我得到了具有多对多关系的用户和用户组。用户有一组UserGroup,UserGroup域对象看不到该用户

<class name="User" table="UserTable">
    <set name="UserGroup" cascade="save-update" access="field.pascalcase-underscore" table="User2UserGroup">
        <key column="User_Id" />
        <many-to-many class="UserGroup" column="UserGroup_Id" />
    </set>
    ...

...
我试图实现的是当我删除一个用户或一个用户组时,nhibernate从连接表中删除相关性。另外,User和Group是的子对象,我们称之为域。域不执行
cascade=“all delete olinges”
,因此当域被删除时,它将级联删除其所有用户和用户组

回到usergroup关系:如果我理解正确,我就不能使用任何形式的涉及delete的级联,因为我只想删除两个对象之间的关联,而不是相关对象本身。(一个组不会消失,即使它是一个孤儿。在我的世界里,没有组的用户是合法的——他根本没有做任何事情的权利。)


我是否需要查看事件/拦截器?或者我可以通过控制映射来实现我想实现的目标吗?

如果您使用的是支持它的数据库,您不能以外键约束的形式在数据库本身上设置级联吗?

,这可能会起作用,但是我怀疑这可能会在NHibernate缓存中造成很多麻烦。AFAIK在数据库上使用级联删除与NHibernate没有任何问题。有关使用事件侦听器解决此问题的讨论(在NHibernate2.1中),请查看以下文档:Michael,感谢所有的输入和链接。正如我已经研究过事件侦听器的directon(事实上,我已经在我的应用程序中注册了一个不做任何事情的事件侦听器),这就是我将继续的方向。即使数据库能够删除幕后的内容(甚至可能快得多),我也不希望这样做,因为我希望将所有内容都保留在同一层中。从我的应用程序的nhibernate-2之前的根来看,我仍然有大量不健康的SQL,而不是可执行的HQL。