java - 如何跟踪用户对 Web 应用程序中对象的更改?

标签 java mysql hibernate database-design

我需要帮助想出一种巧妙的方法来跟踪 Web 应用程序中的用户更改。

假设我们有这样的场景:

  1. 用户 X 登录并更新其个人资料中的一些字段,例如电子邮件地址。
  2. 这会导致用户被标记为已更新,并且应由管理员进行检查
  3. 在管理 UI 中,我们要突出显示已修改的字段

问题就变成了,跟踪这些变化的最佳方法是什么?管理员可能几天甚至几周都不会检查用户。我真的不需要保留原始值(至少在这一点上),我只是希望能够确定哪些字段已更改。在数据库中跟踪这一点的最佳方法是什么?

该应用程序是用 Java/JSF 编写的,并使用 Hibernate 和 MySQL 进行数据访问和存储。

谢谢!

最佳答案

根据您的用例,我会选择这样的东西:

创建一个具有以下结构的“日志”表:

Username|Fieldname        |Processed
Pamar   |Profile.Email    |No
Pamar   |Homepage.Blurb   |No

在您想要跟踪的字段上设置触发器。每当修改“记录”字段时,触发器都会创建一条指向用户和字段名称的记录。

应用程序的标记部分将允许管理员查询日志表(仅选择“未处理”记录)并一次处理一个或多个字段。 您没有提供有关标记/索引过程的许多详细信息,但该表应该足以正确识别更改的字段(并且您可以直接查询这些字段以访问当前值,这就是您所需要的)。处理(索引)给定更新后,您可以将其“已处理”标志设置为"is"(或删除它,您可以选择)。

您可以选择使用时间戳字段,以便您可以按照用户完成更新的顺序处理更新。

如果您甚至需要保留“以前的版本”,您只需向当前结构添加一个文本字段并更新触发器,以便它们在其中保存旧值。

关于java - 如何跟踪用户对 Web 应用程序中对象的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562442/

相关文章:

java - EMR 上的 MapReduce 不联系 RMProxy,并陷入等待资源管理器的状态?

javascript - 用php和mysql链接选择框

java - 使用 JPA/hibernate 时是否可以将 orm.xml 定义与注释混合在一起?

java - 下面代码中条件运算符的用法

JavaFX 流量模拟转换

java - 这个 JSP 可能有什么问题

MySQL 查询绘制器

hibernate - play 和 postgres 未找到关系错误(表确实存在)

java - Hibernate - NClob 属性

java - 扫描多个文件并按字母顺序打印