Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java 如何定制Hibernate环境_Java_Hibernate_Hibernate Envers_Javers - Fatal编程技术网

Java 如何定制Hibernate环境

Java 如何定制Hibernate环境,java,hibernate,hibernate-envers,javers,Java,Hibernate,Hibernate Envers,Javers,我们设计的实体审计库有两个特定的要求:每个实体一个表和增量日志JSON diff非完整快照 我只知道Hibernate EnVers和JaVers用于实体审计。如果还有什么事,请告诉我。没有一个能满足我们的要求 我们已经知道审计记录是什么样子的,我们希望在实现库时尽可能多地重复使用。我正在考虑添加Hibernate EnVers作为依赖项,并对其进行定制/扩展以支持我们的需求 第一个问题是,考虑到我们的需求和我们使用Spring+JPA+Hibernate的平台,是否有任何强有力的理由支持JaV

我们设计的实体审计库有两个特定的要求:每个实体一个表和增量日志JSON diff非完整快照

我只知道Hibernate EnVers和JaVers用于实体审计。如果还有什么事,请告诉我。没有一个能满足我们的要求

我们已经知道审计记录是什么样子的,我们希望在实现库时尽可能多地重复使用。我正在考虑添加Hibernate EnVers作为依赖项,并对其进行定制/扩展以支持我们的需求

第一个问题是,考虑到我们的需求和我们使用Spring+JPA+Hibernate的平台,是否有任何强有力的理由支持JaVers而不是Hibernate EnVers

假设第一个问题的答案是否定的,我们将使用Hibernate EnVers,那么Hibernate EnVers可以扩展到什么程度?而且,除了一些超级简单的例子外,我找不到任何关于如何准确实现它的资源。有吗?我从哪里开始

我们的设计大致如下:

Entity Table
Employees (EmployeeId, FirstName, LastName, DepartmentId, ...)

Audit Table
Employees_AUD (EmployeeId, Diff, REV, REVTYPE)
-- EmployeeId: employee ID
-- Diff: diff of the two states of entity
-- REV: revision id (Hinbernate EnVers)
-- REVTYPE: revision type (Hinbernate EnVers)

REVINFO Table:
-- Original table created by Hibernate EnVers
谢谢。

不能按照您描述的方式扩展Envers

您所描述的内容需要完全替换实体模型的元数据处理,以及如何为ORM生成XML模式,以及如何在ORM事务和AuditReader查询期间使用映射器读取和写入实体。简言之,它最终成为设计范式的转变,影响了大量的内部功能

JSON字符串的存储并不理想,尤其是在关系数据库上,在还不真正支持该数据类型的环境中更是如此。在JSON和字符Blob之间进行转换时,在写入和读取时都会导致性能下降,然后在数据库中进行额外的查找和读取/写入操作,以将该Blob存储在一个单独的区域中,该区域由于其未知/可变的大小而远离其他列数据

虽然有一些数据库平台可以帮助解决上述问题,但仍然值得注意,尤其是在审计工具中,当数据更改时,您可能需要处理大量的行

我相信最接近enver的方法是实现一个配置选项,该选项允许我们仍然维护一个基于列的审计表,但只保存每个快照修改的列,而不是所有列


我们需要看到的是,这对AuditReader API有多大的影响。如果您希望看到这一点,请随时打开JIRA并提交PR供我审阅。

您的解决方案是否意味着您需要读取id不超过特定修订号的给定员工的所有审核行,以便合并差异以了解该员工的所有审核状态?这比简单地存储一个像Enver一样的快照开销更大,让查询端直接、高效、简单。如果你考虑Javes或Enver,这篇文章可以帮助@ NalOS你是对的,但我们只对差异感兴趣。@BartekWalacik感谢链接,我已经读过了,做得很好,非常出色: