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

时间:2012-04-04 07:58:15

标签: database database-design java-ee jpa

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

例如,有一个名为Investigation的实体。它具有名称,类别,价格,数量等属性。用户可以搜索单个调查并在一个实例中更改名称,而在另一个实例中,另一个用户可以更改价格。完成更改的所有这些场合以及执行此更改的用户都需要在需要时进行追溯。

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

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

在这些方法中,最佳做法是什么?是否有任何其他优化方法可以将记录编辑历史保留在Java持久性中?

3 个答案:

答案 0 :(得分:2)

如果您不介意使用Hibernate,Envers可能对您有用。它会自动执行审计,可选择附加当前用户等元数据。

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

答案 1 :(得分:2)

EclipseLink支持历史记录。

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

答案 2 :(得分:0)

您可以查看拦截器的使用情况,以拦截对bean的调用,从而将数据保存到数据库中。 在这个拦截器中,您可以注入当前的SessionContext并从中读取当前用户......而不是将此用户设置为实体“modifiedBy”字符串或其他任何内容。

我没有彻底阅读它,但通过略读它可能对你有所帮助:http://kenai.com/projects/javaee-patterns/forums/forum/topics/3191-Adding-current-user-information-to-JPA-entities