JavaEE和JPA应用程序需要记录用户所做的所有更改。
当前,对于所有实体,都有一些字段来记录createdBy和lastEditedBy属性。但是,使用这些属性不可能记录所有编辑。
记录特定实体的所有编辑历史的最佳方法是什么?
我不使用Spring。
您可以使用Hibernate的Envers来审核您的实体。它使您可以跟踪对实体进行的所有更改,甚至删除的更改。很可能您已经在使用Hibernates(作为JPA提供程序),因此集成应该没有问题。
您可以使用Javers这是数据库和框架不可知的工具来维护操作历史记录。
JaVers和Envers之间有两个大区别:
Envers是Hibernate插件。与Hibernate集成良好但是您只能将其与传统SQL数据库一起使用。如果您选择NoSQL数据库或SQL,但具有另一个持久性框架(用于示例JOOQ)-不能选择Envers。
相反,JaVers可以与任何类型的数据库和任何一种持久性框架。目前,JaVers带有存储库MongoDB和流行的SQL数据库的实现。其他数据库(例如Cassandra,Elastic)可能会在将来添加。
Envers的审计模型是面向表的。您可以将Envers视为用于对数据库记录进行版本控制的工具。
JaVers的审核模型是面向对象的。都是关于物体的快照。 JaVers将它们保存到单个表(或Mongo)作为具有统一结构的JSON文档。
您还可以使用触发器并存储对象差异来实现。
编辑:JaversAuditableAspect适用于任何类型的存储库。它在使用方法级别@JaversAuditable注释的任何方法上定义切入点。如果您的存储库不受Spring Data的管理,请选择它。
@Bean public JaversAuditableAspect javersAuditableAspect() { return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider()); }