如何在JPA应用程序中保留实体编辑的历史记录

问题描述 投票:0回答:2

JavaEE和JPA应用程序需要记录用户所做的所有更改。

当前,对于所有实体,都有一些字段来记录createdBy和lastEditedBy属性。但是,使用这些属性不可能记录所有编辑。

记录特定实体的所有编辑历史的最佳方法是什么?

我不使用Spring。

jpa jpa-2.0
2个回答
0
投票

您可以使用Hibernate的Envers来审核您的实体。它使您可以跟踪对实体进行的所有更改,甚至删除的更改。很可能您已经在使用Hibernates(作为JPA提供程序),因此集成应该没有问题。

https://hibernate.org/orm/envers/


0
投票

您可以使用Javers这是数据库和框架不可知的工具来维护操作历史记录。

JaVers和Envers之间有两个大区别:

  1. Envers是Hibernate插件。与Hibernate集成良好但是您只能将其与传统SQL数据库一起使用。如果您选择NoSQL数据库或SQL,但具有另一个持久性框架(用于示例JOOQ)-不能选择Envers。

    相反,JaVers可以与任何类型的数据库和任何一种持久性框架。目前,JaVers带有存储库MongoDB和流行的SQL数据库的实现。其他数据库(例如Cassandra,Elastic)可能会在将来添加。

  2. Envers的审计模型是面向表的。您可以将Envers视为用于对数据库记录进行版本控制的工具。

    JaVers的审核模型是面向对象的。都是关于物体的快照。 JaVers将它们保存到单个表(或Mongo)作为具有统一结构的JSON文档。

您还可以使用触发器并存储对象差异来实现。

编辑:JaversAuditableAspect适用于任何类型的存储库。它在使用方法级别@JaversAuditable注释的任何方法上定义切入点。如果您的存储库不受Spring Data的管理,请选择它。

@Bean public JaversAuditableAspect javersAuditableAspect() { return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider()); }
© www.soinside.com 2019 - 2024. All rights reserved.