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

ser*_*erg 5 java mysql database hibernate cascade

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

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

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

child.hbm:

<many-to-one name="parent" class="com.example.Parent" column="parentid"/>
Run Code Online (Sandbox Code Playgroud)

而parent.hbm与child没有关联.

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

谢谢.

Dan*_*ton 5

几种选择:

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

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

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

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