话说ORM框架中的级联更新问题

红薯 发布于 2009/04/23 14:16
阅读 1K+
收藏 1

一些复杂的ORM框架,例如 HibernateiBatis 都是支持级联查询的。

但是在应用中,还经常需要一些级联的更新操作,例如级联的删除和数据更新。这个好像目前在程序上并没有一些简单漂亮的解决办法,例如我们删除一个回帖,可能需要修改主贴的回帖数;或者删除某个用户则需要将该用户发表的所有信息都给删除了,等等之类的需求。

想想是否可以通过 Java 的 Annotation 对级联的对象进行一些简单的声明后就可以实现级联删除或者更新呢?

加载中
1
mallon
mallon

我也不喜欢让数据库管过多的事情,这样迁移起来方便

0
况天涯
况天涯

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

0
红薯
红薯

引用来自“况天涯”的帖子

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

不只是删除,删除好办,主要是更新,如帖子中说的。

0
况天涯
况天涯

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

不只是删除,删除好办,主要是更新,如帖子中说的。

 更新的话,还是放在数据库里面处理,设置触发器来做。

0
红薯
红薯

引用来自“况天涯”的帖子

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

不只是删除,删除好办,主要是更新,如帖子中说的。

 更新的话,还是放在数据库里面处理,设置触发器来做。

利用触发器来做的确也是一种方法,只不过我更喜欢在程序中处理这种业务逻辑,以降低应用对数据库的依赖

0
X
Xsen

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

不只是删除,删除好办,主要是更新,如帖子中说的。

 更新的话,还是放在数据库里面处理,设置触发器来做。

利用触发器来做的确也是一种方法,只不过我更喜欢在程序中处理这种业务逻辑,以降低应用对数据库的依赖

我倒觉得,更重要的是把业务逻辑在代码中实现,而不是"隐藏"在数据库中,而且万一触发失败怎么知道,怎么办呢:)在程序中实现的话,就可以重复执行、log每次失败的信息等。

0
宋浩
宋浩

引用来自“xsen”的帖子

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

引用来自“红薯”的帖子

引用来自“况天涯”的帖子

为什么不把级联删除直接放在数据库里处理,利用外键配置级联删除,我觉得这个比在程序里写更方便。

不只是删除,删除好办,主要是更新,如帖子中说的。

 更新的话,还是放在数据库里面处理,设置触发器来做。

利用触发器来做的确也是一种方法,只不过我更喜欢在程序中处理这种业务逻辑,以降低应用对数据库的依赖

我倒觉得,更重要的是把业务逻辑在代码中实现,而不是"隐藏"在数据库中,而且万一触发失败怎么知道,怎么办呢:)在程序中实现的话,就可以重复执行、log每次失败的信息等。

数据库只存储数据这个责任就已经很重了。再另外附加一些业务逻辑感觉只会更复杂更乱。

各司其责就行了

0
mallon
mallon

hibernate或者jpa有这个注解,我习惯是fetch = FetchType.EAGER, cascade = CascadeType.ALL

0
X
Xsen

引用来自“mallon”的帖子

我也不喜欢让数据库管过多的事情,这样迁移起来方便

对头,我曾经接手维护过一个项目,很多逻辑都写在存储过程中的,而且有很多依赖触发器,维护起来头都大了。后来我逐步的把逻辑提到service层中来,累哦。

返回顶部
顶部