在数据库中记录编辑历史的最佳方式是什么



我正在开发一个使用Java EE和JPA的系统,用户可以在其中更改实体。需要在需要时追溯到更改。因此,当进行更新时,每次都必须记录所有的更改和用户。记录变化的最佳方式是什么。

例如,有一个名为"调查"的实体。它具有名称、类别、价格、数量等属性。用户可以搜索单个调查并在一个实例中更改名称,在另一个实例下,另一个用户可以更改价格。在所有这些情况下,都需要在需要时追溯进行更改的用户。

此链接中描述的一种方法是将对象标记为已编辑的旧对象,并创建一个具有更新值的新对象,但问题是来自不同实体的其他几个对象引用了旧对象。

本链接中描述的另一种方法是在新表中使用版本控制字段。在JPA中,可以通过创建一个扩展主实体的新实体来实现Than。

在这些方法中,最佳实践是什么?有没有其他优化的方法可以在Java Persistence中保存记录编辑历史?

EclipseLink支持历史记录。

参见,http://wiki.eclipse.org/EclipseLink/Examples/JPA/History

如果您不介意使用Hibernate,Envers可能会对您很感兴趣。它自动执行审核,可以选择像当前用户一样附加元数据。

对于每个已审核的实体,它都会创建一个包含以前版本的历史记录表。

最新更新