多对多级联删除

时间:2009-06-24 13:47:31

标签: nhibernate many-to-many

我已经定义了两个类之间的多对多关系。 事件和人(在单独的数据库表person_event中定义)。 现在,假设我想删除一个人,因此所有与事件相关的关联也必须从person_event表中删除。换句话说,我想要级联 ON DELETE。

让我们考虑一个场景:

  • “events”表包含由id = 1,2,3确定的三个事件。
  • “person”表包含由id = 4,5确定的两个人。
  • 包含1-4,2-4,3-5
  • 等关联的“person_event”表

现在,假设我使用Hibernate.delete()删除事件1,不仅如此 它是删除event1,还是关联person_event1-4,还有 person4!

问题是person4被另一个表引用并抛出外部约束异常... 我如何配置NHibernate只删除事件和关联person_event?

2 个答案:

答案 0 :(得分:2)

我认为如果你在多对多地图上将Cascade设置为none,你应该能够得到你想要的。

它只会删除与事件有关的条目,但不会将删除效果级联到Person。

答案 1 :(得分:0)

我不熟悉Hibernate,但我认为你想在调用Hibernate.delete()之前通过所讨论的person对象从任何与之关联的人中删除你的事件。

这会进入对象生命周期问题,我认为你需要仔细思考。例如,如果event1与person1和person2以及person4相关联,并且您删除了person1,则您可能希望自动删除event1。