不应该使用数据库的ON DELETE CASCADE?

hetty1006 2010-12-16 07:35:48
我们有个需求

要删除某个实体的时候 首先检查是否满足一些条件 如果满足条件 则把所有相关实体都删除

我把检查放在Service Layer

但是把ON DELETE CASCADE 放在数据库外键上

被另外两个技术人员狂批 说绝对不允许这样的code在我们的应用程序里面。。。。

说应该放在Hibernate里面。。。。 还和我说了一大堆什么要follow good practice 要follow design pattern

其实我没明白为啥

可是相关实体真的太多了 我们本来的hibernate object根本没有这些联系

我想问问

我这样做真的这么错嘛?
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dyllove98 的回复:]

ON DELETE CASCADE 这样做的确很难控制

现在的趋势是 数据库的关系尽量的简单,尽量不要设外键之类的,所有的逻辑全部在代码中完成
[/Quote]

非常同意啊,我们就是代码控制的。
  • 打赏
  • 举报
回复
数据库级联尽量少用,特别是 Hibernate 这种 ORM 工具中。我们数据库只有外键关系,不建立外键约束。
hetty1006 2010-12-16
  • 打赏
  • 举报
回复
真的这么复杂?

现在的代码里面只有单向联系

比如A是Parent Object 那么它有B,C,D,E,F.....等Child Object

但是在A中没有这些定义
只是在B,C,D,E,F中有

难道为了使用Hibernate cascade

我要在A里面增加
List<B> bs
List<C> cs
.......
我现在用的是Annotation 方式-,-

还是说 我应该写个方法去search所有的children 然后一个个删除?然后在这个方法上加个@Transactional?
Jlins 2010-12-16
  • 打赏
  • 举报
回复
ON DELETE CASCADE 这样做的确很难控制

现在的趋势是 数据库的关系尽量的简单,尽量不要设外键之类的,所有的逻辑全部在代码中完成
zn85600301 2010-12-16
  • 打赏
  • 举报
回复
一般是不推荐用数据库的级联的 在程序中用事务控制的删除好一些 也容易跟踪问题
你用数据库级联 出了问题确实很难跟踪到

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧