1

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

让我们考虑一个场景:

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

现在,假设我使用 Hibernate.delete() 删除事件 1,那么它不仅删除了 event1 和关联 person_event1-4,还删除了 person4!

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

4

2 回答 2

2

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

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

于 2009-12-30T14:11:50.410 回答
0

我在 Hibernate 方面没有那么有经验,但我认为你想person在调用 Hibernate.delete() 之前通过相关对象从任何与之关联的人那里删除你的事件。

这涉及到对象生命周期问题,我认为您需要非常仔细地考虑这些问题。例如,如果 event1 与 person1 以及 person2 和 person4 相关联,并且您删除了 person1,您可能希望 event1 被自动删除。

于 2009-06-24T14:34:18.820 回答