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

问题描述

我们有个需求要删除某个实体的时候首先检查是否满足一些条件如果满足条件则把所有相关实体都删除我把检查放在ServiceLayer但是把ONDELETECASCADE放在数据库外键上被另外两个技术人员狂批说绝对不允许这样的code在我们的应用程序里面。。。。说应该放在Hibernate里面。。。。还和我说了一大堆什么要followgoodpractice要followdesignpattern其实我没明白为啥可是相关实体真的太多了我们本来的hibernateobject根本没有这些联系我想问问我这样做真的这么错嘛?

解决方案

解决方案二:
一般是不推荐用数据库的级联的在程序中用事务控制的删除好一些也容易跟踪问题你用数据库级联出了问题确实很难跟踪到
解决方案三:
ONDELETECASCADE这样做的确很难控制现在的趋势是数据库的关系尽量的简单,尽量不要设外键之类的,所有的逻辑全部在代码中完成
解决方案四:
真的这么复杂?现在的代码里面只有单向联系比如A是ParentObject那么它有B,C,D,E,F.....等ChildObject但是在A中没有这些定义只是在B,C,D,E,F中有难道为了使用Hibernatecascade我要在A里面增加List<B>bsList<C>cs.......我现在用的是Annotation方式-,-还是说我应该写个方法去search所有的children然后一个个删除?然后在这个方法上加个@Transactional?
解决方案五:
数据库级联尽量少用,特别是Hibernate这种ORM工具中。我们数据库只有外键关系,不建立外键约束。
解决方案六:
引用2楼dyllove98的回复:

ONDELETECASCADE这样做的确很难控制现在的趋势是数据库的关系尽量的简单,尽量不要设外键之类的,所有的逻辑全部在代码中完成

非常同意啊,我们就是代码控制的。

时间: 2024-10-03 02:06:45

不应该使用数据库的ON DELETE CASCADE?的相关文章

主外键关联删除(on delete set null和on delete cascade)

主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式: 1.禁止删除,也是Oracle默认方法. 2.将参照要删除数据的子表对应数据置空. 3.将参照要删除数据的子表对应数据删除. 对于1,比较容易理解,不解释. 对于2,需要使用on delete set null建立外键约束.实验: create table dept_test(deptno number(10) not null, deptname varchar2(30) not null, constrain

oracle中使用on delete cascade和on delete set null来建立外键

oracle中使用on delete cascade和on delete set null来建立外键 其面我们介绍了创建外键约束时如果使用oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null关键字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空. 例如下面这两个表中分别存的时员工的基本信息和公司的

Oracle数据库删除语句DELETE的一般性用法

语法与其它的sql数据库教程是一样的,如下 DELETE FROM COURSES WHERE  COURSE_DESIGNATER = 'Java110' 按条件比较复杂的操作方法 DELETE FROM CLASSCONVENINGS WHERE      CLASSES_NUM_FK      > 4    AND CLASS_CONVENE_DATE = TO_DATE('2006-02-15 00:00:00',                                    '

oracle数据库删除数据Delete语句和Truncate语句的使用比较_oracle

当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍. 一.delete语句 (1)有条件删除 语法格式:delete [from] table_name [where condition]; 如:删除users表中的userid为'001'的数据:delete from users where userid='001'; (2)无条件删除整个表数据 语法格式:delete table_name; 如:删除user

数据库开发——参照完整性——在外键中使用Delete on cascade选项

原文:数据库开发--参照完整性--在外键中使用Delete on cascade选项 原文: http://www.mssqltips.com/sqlservertip/2743/using-delete-cascade-option-for-foreign-keys/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=2012731   参照完整性在设计数据库时需要重视,在我

sql server2005(数据库安全性和参照完整性)

--创建登录账号 create login username with password='password' --创建数据库用户 create user username for login username ---授予该用户对Student表的查询权限,同时授予其进一步授权其他用户的权利. grant select on student to user_tom with grant option ----- create login marry with password='marry001

SQL 数据库表的修改

当表创建好后,可能根据需要要对表的列.约束等属性进行添加.删除或修改,这就需要修改表结构. 7.4.1 用Enterprise Manager 修改在Enterprise Manager 中选择要进行改动的表,单击右键,从快捷菜单中选择"DesignTable"选项,则会出现如图7-4 所示的修改表结构对话框.可以在图7-4 所示的对话框中修改列的数据类型.名称等属性或添加.删除列,也可以指定表的主关键字约束.单击工具栏中的图标,出现如图7-5 所示的编辑表和约束的属性的对话框.可以在

Oracle数据库的完整性约束规则

oracle|数据|数据库 完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: Check NOT NULL Unique Primary Foreign key 完整性约束是一种规则,不占用任何数据库空间.完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用.用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中. 禁用约束,使用ALTER语句 ALTER TABLE table_name DISABLE CON

把Oracle数据库移植到Microsoft SQL Server 7.0

oracle|server|数据|数据库  把Oracle数据库移植到Microsoft SQL Server 7.0 摘要:本文是为那些想把自己的Oracle应用程序转换为Microsoft SQL Server应用程序的开发人员编写的.本文描述了一个成功的转换所需要的工具.过程和技术.同时强调了建立高性能.高度并行的SQL Server应用程序的基本的设计要素. 本文的读者应该具有: Oracle关系型数据管理系统(RDBMS)的坚实基础. 普通数据库管理知识. 熟悉Oracle SQL和P