版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81564797
在项目开发中,数据库的删除一般都是逻辑删除,可以很好的保持数据的完整性,但是很多时候我们写SQL的是时候查询的时候不得不加上SQL后面加上where delete_flag=xxx,这样,导致这样我们工作量繁琐,特别是hibernate 中通过ID查询的时候,很是恼火。
不过好在hibernate中有@SQLDelete和@Where这两个注解帮我们解决了这个难题。
在entity中使用这两个注解,如图所示
在sql中写上删除的时候的SQL语句,到调用delete方法的时候,hibernate将自动执行该语句将实现软删除。
下面将展示效果:
首先查询一条数据库中存在的数据。
然后查看结果,发现存在这条数据,并且没有被删除的。
然后查看数据库的操作SQL,发现在SQL的最后加上了@Where注解的内容
我们将数据删除看看数据还存不存在,操作代码如下
操作后查询出的数据为空,表明已经删除成功。
再看看hibernate的删除SQL
hibernate删除只是操作了@SQLDelete中的SQL语句。
至此,通过@SQLDelete和@Where搭配完成了数据库的逻辑删除。
当然,对于一些关联查询的问题,只要查询的对象没有删除,那关联的对象就算删除了也可以查询出来,当然,这里指的删除是逻辑删除。
通过查看hibernate的源码可以看到还有@SQLDeleteAll、@SQLInsert和@SQLUpdate这里就一一介绍了,功能都差不多。