关于springboot:后台梳理软删除思路

10次阅读

共计 1045 个字符,预计需要花费 3 分钟才能阅读完成。

序言

在之前开关柜我的项目中一开始没有波及到软删除,因为本人仅仅负责一个用户治理。在开始智慧社区我的项目之后,软删除的问题成了一个不得不解决的问题了。上面将以智慧社区我的项目进行梳理。

1. 何为软删除

逻辑删除(标记删除),如果逻辑删除不了解,我想标记删除最容易进行了解:应用一个字段,将被删除数据的该字段进行标记,依据该字段能够判断该数据是否曾经进行逻辑删除(仍旧存在于数据库中,然而查问等获取不到了)。

举个栗子:一个公司有 n 集体下班,那么忽然一天这个公司开张了,能够认为该公司被删除了,那么在员工治理的时候,因为该公司被删除了,获取这些员工时后盾便会报错,EntityNotFound,或者报无奈删除,有限制性束缚,如下图:

2. 实现过程:

1. 减少标记字段:两种形式:

(1)减少 is_deleted 的布尔型字段(2)增加 deleted_at 的工夫戳字段

第(1)种比较简单,初始化的时候间接设置默认值为 false,删除的话便将该字段变为 true
第(2)种为设置删除工夫,如果删除,则该字段值为删除工夫戳;如果未删除,则该字段为 null

实现软删除过程中遇到的问题

1. 继承后,注解不肯定会被继承

父类为 Distract:如下图

子类为 Town:如下图

谬误剖析 :天真的认为继承之后,那么 Distract 的 @SQLDelete 和 @Where 注解等都会被继承
通过测试发现 @SQLDelete 并没有被继承,只有 @Where 被继承了

2. 理解了 NotFound 注解

作用:Action to do when an element is not found on a association.(在关联上找不到元素时要执行的操作。)

1.默认 org.hibernate.annotations.NotFoundAction.EXCEPTION(The action to perform when an associated entity is not found. By default an exception is thrown 关联实体未找到,抛出异样)

2.NotFoundAction.IGNORE: ignore the element when not found in DB(在数据库中找不到元素时疏忽该元素)

总结:

1. 本次软删除犯的次要谬误就是想当然了,误以为继承也能够继承注解,实则须要本人尝试去验证本人的想法。
2. 此次软删除并没有用到 NotFound 注解,因为应用的是有外键束缚的数据库,所以在删除的时候便会报谬误:不可删除,那么也不存在说关联属性在数据库不存在的状况。

正文完
 0