Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保存JPA应用程序中实体编辑的历史记录_Jpa_Jpa 2.0 - Fatal编程技术网

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

如何保存JPA应用程序中实体编辑的历史记录,jpa,jpa-2.0,Jpa,Jpa 2.0,JavaEE和JPA应用程序需要记录用户所做的所有更改 目前,对于所有实体,都有要记录createdBy和lastEditedBy属性的字段。然而,对于这些属性,记录所有编辑的要求是不可能的 记录特定实体所有编辑的历史记录的最佳方法是什么 我不使用Spring。您可以使用Hibernate的Envers来审核您的实体。它允许您跟踪对实体所做的所有更改,甚至是已删除的更改。很可能您已经在使用Hibernates(作为JPA提供者),所以集成应该是没有问题的 您可以使用数据库和框架无关工具来维护操作

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

目前,对于所有实体,都有要记录createdBy和lastEditedBy属性的字段。然而,对于这些属性,记录所有编辑的要求是不可能的

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


我不使用Spring。

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

您可以使用数据库和框架无关工具来维护操作历史记录

JaVers和Envers之间有两大区别:

  • Envers是Hibernate插件。它与Hibernate有很好的集成 但您只能将其用于传统的SQL数据库。如果你愿意 NoSQL数据库或SQL,但具有另一个持久性框架(用于 示例JOOQ)-Envers不是一个选项

    相反,JaVers可以用于任何类型的数据库和任何 一种持久性框架。现在,JaVers附带了存储库 MongoDB和流行SQL数据库的实现。其他数据库 (像卡桑德拉,弹性)可能会在未来加入

  • Envers的审计模型是面向表的。你可以把Envers看作是 用于对数据库记录进行版本控制的工具

    JaVers的审计模型是面向对象的。这都是关于对象的 快照。JaVers将它们保存到单个表(或中的集合) Mongo)作为统一结构的JSON文档

  • 您还可以使用触发器和存储对象差异来实现这一点

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

    @Bean public JaversAuditableAspect javersAuditableAspect() { return new JaversAuditableAspect(javers(), authorProvider(), commitPropertiesProvider()); }
    

    您不能使用数据库触发器来跟踪更改吗?您可以提供一个参考链接吗?这将取决于您使用的数据库服务器。对于postgresql,您可以在那里查看一下:这样的更改的目的是什么?您希望如何使用存储的信息?国际海事组织另一个非常重要的问题是这些变化的频率有多高?还有一个问题,应用程序是否处于高负载下(换句话说,与数据库的额外交互是否可以接受)?谢谢。贾维斯似乎是最好的选择。谷歌显示它需要春天。我可以不用弹簧吗?是的,也可以不用弹簧。该方法在文档中提供。编辑我的答案给你们一个简短的介绍。我使用JPA和EclipseLink,而不是hibernate