我有一个员工和相应的员工历史记录表。
两个表具有相同的结构。历史表用于跟踪员工在一段时间内的历史变化。
现在,我需要为对员工所做的更改添加撤消功能。
例如员工职称于 8 月 1 日发生变更。现在,这将更新 Employee 表中的员工头衔,并在 employee_history 表中插入相应的历史记录。
现在,我需要撤消此更改。员工编辑页面将包含按日期对员工所做的更改列表,旁边有一个撤消按钮。
单击“撤消”应将 Employee 表中的更改恢复为之前的值。另外我认为历史表中显示标题已更改的记录也应该删除。
此外,当我恢复对员工表的更改(即将标题恢复为以前的标题)时,这将触发对历史表的插入,这是我不想要的。
我不确定最好的方法是什么。
任何建议都会有帮助。
最佳答案
如果您想要实现“持久”撤消 - 在应用程序重新启动/ session 超时后仍能保留的撤消,您应该考虑扩展数据库架构宽度 timestamp
字段,并删除最后一个条目或将其替换为适当的早期条目。
“轻型”版本将使用堆栈来存储最后的交互,包括原始值和新值。当然,您可以在 session 失效时保留堆栈以结合这两种方法。这似乎就是您实际上正在做的事情。
您可以通过为每个更改创建和存储或导出 SQL 迁移脚本、记录更改以及(如果可能)相反的操作来扩展此解决方案。因此,您甚至可以在应用程序实例和环境之间传输脚本,并且可以完全“重玩”数据库状态。
tl;dr - 看来您已经实现了一个很好的解决方案
关于java - 如何在基于 Spring MVC 的 Web 应用程序中创建撤消功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760562/