Hibernate级联删除包

时间:2010-04-28 09:22:56

标签: nhibernate orm

使用NHibernate构建了大部分DAL之后,我现在发现在我的HBM文件中也需要考虑SQL Server的Cascade On Delete规则。我一直在为我的所有收藏品使用包,但似乎没有办法将一个cascade =“delete”属性添加到包中。我可以将所有行李更改为套装,但这似乎意味着我已将我模型上的所有IList<>更改为PersistentGenericSet<> s,我真的不喜欢这样做。

有什么建议吗?

安东尼

2 个答案:

答案 0 :(得分:5)

有两个独立但相关的概念:NHibernate的级联规则和DB级联。

后者实际上是在key元素上配置的,所以,如果FK有ON DELETE CASCADE,这就是包应该是这样的:

<bag name="Children" ...>
  <key column="ParentId" on-delete="cascade"/>
  <one-to-many class="Child"/>
</bag>

答案 1 :(得分:3)

您可以向行李贴图添加级联属性。 documentation列出了属性cascade="all|none|save-update|delete|all-delete-orphan"的多个选项。一对多关系最常用的选项是all-delete-orphan。将级联设置为此值将导致所有数据库操作级联到集合,并且如果从集合中删除子对象(孤立的),则将删除子对象。

数据库级联类似,但不提供自动删除孤立子记录的功能。在NHibernate和数据库中设置级联选项有点多余,但如果您有其他系统直接访问数据库,则可能很有用。