Hibernate:如果子节点链接到父节点多对一,如何在删除父节点时从子表中删除Hibernate记录?

时间:2008-12-11 16:45:08

标签: java mysql database hibernate cascade

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

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

问题是我不希望在父方面有一对多关系,所以我在孩子方面创建了多对一关系。原因是子表非常大,我不想每次使用父表时提取数百条记录。 所以我的配置如下:

child.hbm:

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

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

问题是:如果孩子被链接到具有多对一的父母,如何在删除父母时从子表中删除Hibernate?

感谢。

1 个答案:

答案 0 :(得分:5)

几个选项:

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

  • 使用Hibernate Interceptor(或AOP环境中的某个方面)来检测父记录删除和删除子项。

我个人赞成第一个选项,因为它可以让您的数据模型更准确地反映数据中的真实关系。

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

寻找你感兴趣的贴纸↓↓↓
豫ICP备18024241号-1