目前是通过用 Query 注解写一个基础的 BaseSoftDeleteRepository,然后给其他 repository 继承,但是这样基于命名规则的查询 (比如 findByUsername) 还是没有过滤已经软删除的数据,大家是怎么解决的?
3
ourslay 2020-07-30 09:17:14 +08:00
|
5
passerbytiny 2020-07-30 09:54:38 +08:00 via Android
Hibernate (而非 JPA )提供的软删除是隐藏式软删除,完全由基础设施(业务不参与,完全由 Repository 的技术实现或 ORM 自行处理),总感觉没什么用(因为业务上不关心,所以你留下的历史数据业务上也不会用,只能数据库自己 Happy ),而且容易出坑。
何不试试跳出 CRUD 的框架让业务层直接去处理软删除(这时候你能部分理解到为何账户注销功能那么难做)。然后不能所有的实体都一刀切的软删除,大部分实体都是要硬删除的(可选配转到历史实体,或者仅在数据库搞触发器) |
7
jerrry OP @VeryZero 我是和 QueryDsl 结合起来用的,@Where 应该不会生效,我试一下...
|
8
jerrry OP @passerbytiny 我们设计的大部分实体都是软删除的。。。我其实更倾向于用 binlog 之类的方式把删除的实体存到另外一个库。
|