首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧启动ERP系统最佳删除操作策略

弹簧启动ERP系统最佳删除操作策略
EN

Stack Overflow用户
提问于 2020-02-11 10:24:10
回答 2查看 370关注 0票数 0

我正在为中小型组织开发一个ERP系统,当涉及到实体的删除操作时,我陷入了困境。现在我有一个项目实体和任务实体,即一个项目有许多任务

现在,在执行删除操作时,我有三个选项。

1>或者从数据库中永久删除数据,并带有子数据。

也就是说,如果项目被删除,那么也删除它的相关任务

这里的问题是:一旦它被删除,我们就不能回来了。

2>要么只将isDeleted设置为true。

这里的问题是:如果任何实体的isDeleted为true,那么它的关联实体可以通过Getter方法获取它(所以这不是一个好主意)

如果Project P1有三个任务-- T1、T2、T3和Fetch。例如,如果我将任务T1设置为isDeleted,那么,如果我得到项目P1,它也将得到三个任务以及T1,因为它们之间仍然有关系,T1只会更新为T1到true。

3>或将实体的所有事件(CRUD)存储在单独的历史记录表中

这里的问题是:数据库大小将在多次,然后是常规数据库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-11 12:48:36

与其实际删除数据,而且比isDeleted更好,不如尝试deletedDate。如果deleted_date为null,则产品是活动的。如果没有,则将设置删除日期。

现在在实体上,只需写

代码语言:javascript
复制
@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查询中,因此只会获取未删除的查询。

票数 0
EN

Stack Overflow用户

发布于 2020-02-11 12:30:28

评论摘要:

1>要么从数据库中永久删除数据,要么使用子数据--也就是说,如果项目被删除,那么也删除它相关的任务

这里的问题是:一旦它被删除,我们就不能回来了。

你实际上不想删除这些数据。您只想要sudo删除这些数据,也希望能够恢复已删除的数据。解决方案:您可以标记已删除的数据(可能有问题),也可以维护单独的表/模式,其中只存储已删除的数据。通过将其移动到单独的表中,您不需要担心已删除的标志和其他复杂的父级子关系。

2>要么只将isDeleted设置为true。

3>或将实体的所有事件(CRUD)存储在单独的历史记录表中

另外,如果您遵循这种(分离的删除数据)方法,这两个问题将自动解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60166705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档