问题描述
我们有个需求要删除某个实体的时候首先检查是否满足一些条件如果满足条件则把所有相关实体都删除我把检查放在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