加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将delete-orphan与where条件组合在一起

发布时间:2020-12-14 19:12:03 所属栏目:Java 来源:网络整理
导读:Hibernate映射问题,其中行为是模糊的和/或危险的.我有一对多关系,具有级联删除孤立条件和where条件限制集合中的项目.这里映射

Hibernate映射问题,其中行为是模糊的和/或危险的.我有一对多关系,具有级联删除孤立条件和where条件限制集合中的项目.这里映射 –

现在假设我有一个与一个或多个Email对象关联的User对象,其中至少有一个对于deleted属性具有’true’值.当我在User对象上调用session.delete()时,会发生以下哪两个?

>将删除用户和所有电子邮件对象,包括已删除= true的对象
>删除用户和已删除的电子邮件对象!= null.

一方面,方案1)忽略where条件,根据域模型可能不正确.但是在方案2)中,如果父项被删除,并且子(email)表的连接键上存在外键约束,则delete命令将失败.哪个发生了,为什么?这只是Hibernate功能如何模糊的另一个例子吗?

最佳答案
我没有测试映射,但在我看来,正确的(默认)行为应该是忽略where条件并删除所有子记录(这是删除父项时避免FK约束违规的唯一选择).从商业角度来看,这可能不是“正确的”,但另一种选择并非“正确”,因为它只是不起作用.

总而言之,映射本身看起来不连贯.您应该不级联删除操作(并手动处理子邮件的删除).

或者,我认为这可能是最正确的行为,您应该实现对用户和相关电子邮件的软删除.像这样的东西:

这里做了什么:

>我们使用sql-delete覆盖默认删除以更新标志而不是真正的删除(软删除).
>我们使用仅获取未被软删除的实体的位置来过滤实体和关联.

这是受到Soft deletes using Hibernate annotations的启发.虽然没有经过测试.

参考

> 5.1.3. Class
> 6.2. Collection mappings
> 16.3. Custom SQL for create,update and delete

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读