5

可以说我有两个表 - 具有多对一关系的“子”和“父”。如果父记录被删除,我需要删除子条目。

如果我通过在 parent.hbm 中创建一对多关联并设置 cascade="all-delete-orphan" 来链接父表的子表,这不是问题。

问题是我不想在父端建立一对多的关系,所以我在子端创建了多对一。原因是子表很大,我不想每次使用父表时都提取数百条记录。所以我的配置是这样的:

child.hbm:

<many-to-one name="parent" class="com.example.Parent" column="parentid"/>

而 parent.hbm 与孩子没有关联。

问题是:如果子级以多对一的方式链接到父级,则在删除父级时如何使 Hibernate 从子表中删除记录?

谢谢。

4

1 回答 1

5

几个选项:

  • 使用级联删除将一对多添加到父级,但使用延迟加载减轻性能损失。

  • 使用Hibernate 拦截器(或 AOP 环境中的方面)来检测父记录删除和删除子记录。

我个人倾向于第一个选项,因为它可以让您的数据模型更紧密地反映数据中的真实关系。

编辑:还有第三种选择,但它并不令人愉快 - 使用数据库触发器,并刷新您的 Hibernate 缓存(或使用非缓存会话)。

于 2008-12-11T20:09:34.927 回答