我正在为中小型组织开发一个ERP系统,当涉及到实体的删除操作时,我陷入了困境。现在我有一个项目实体和任务实体,即一个项目有许多任务
现在,在执行删除操作时,我有三个选项。
1>或者从数据库中永久删除数据,并带有子数据。
也就是说,如果项目被删除,那么也删除它的相关任务
这里的问题是:一旦它被删除,我们就不能回来了。
2>要么只将isDeleted设置为true。
这里的问题是:如果任何实体的isDeleted为true,那么它的关联实体可以通过Getter方法获取它(所以这不是一个好主意)
如果Project P1有三个任务-- T1、T2、T3和Fetch。例如,如果我将任务T1设置为isDeleted,那么,如果我得到项目P1,它也将得到三个任务以及T1,因为它们之间仍然有关系,T1只会更新为T1到true。
3>或将实体的所有事件(CRUD)存储在单独的历史记录表中
这里的问题是:数据库大小将在多次,然后是常规数据库。
发布于 2020-02-11 12:48:36
与其实际删除数据,而且比isDeleted更好,不如尝试deletedDate。如果deleted_date为null,则产品是活动的。如果没有,则将设置删除日期。
现在在实体上,只需写
@DynamicInsert
@SQLDelete(sql =
"UPDATE post SET deleted_date=now() " +
"WHERE id = ?")
@Where(clause = "deleted_date IS NULL ")
class User{
}在这里,@SQLDelete将确保当您调用delete方法时,它实际上并不删除实体,而是将其删除日期设置为删除时。
@Where原因将确保每当任何实体被调用时,它都会将代码AND deleted_date IS NULL添加到相应的hibernate查询中,因此只会获取未删除的查询。
发布于 2020-02-11 12:30:28
评论摘要:
1>要么从数据库中永久删除数据,要么使用子数据--也就是说,如果项目被删除,那么也删除它相关的任务
这里的问题是:一旦它被删除,我们就不能回来了。
你实际上不想删除这些数据。您只想要sudo删除这些数据,也希望能够恢复已删除的数据。解决方案:您可以标记已删除的数据(可能有问题),也可以维护单独的表/模式,其中只存储已删除的数据。通过将其移动到单独的表中,您不需要担心已删除的标志和其他复杂的父级子关系。
2>要么只将isDeleted设置为true。
3>或将实体的所有事件(CRUD)存储在单独的历史记录表中
另外,如果您遵循这种(分离的删除数据)方法,这两个问题将自动解决。
https://stackoverflow.com/questions/60166705
复制相似问题