繁体   English   中英

如何自定义Hibernate EnVers

[英]How to customize Hibernate EnVers

我们正在设计具有两个特定要求的实体审核库:每个实体一个表和不带日志记录(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和Character Blob之间进行转换时,您将在写入和读取时均受到性能影响,然后在数据库中产生额外的查找和读取/写入操作,从而将该Blob存储在远离其他列数据的单独区域中其未知/可变大小。

尽管有可以解决上述问题的数据库平台,但是仍然值得特别注意的是,在审计工具中,随着数据的变化,您可能会处理大量的行。

我相信,最接近的Envers可能会实现配置选项,使我们仍然可以维护基于列的审计表,但仅存储每个快照的已修改列而不是所有列。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM