我们可以在 Hibernate envers revinfo 表中自定义 rev 列数据类型吗?

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

revinfo
表的默认 DDL 如下所示:

CREATE TABLE revinfo (
    rev int4 NOT NULL,
    revtstmp int8 NULL,
    CONSTRAINT revinfo_pkey PRIMARY KEY (rev)
);

我的要求是将

rev
列作为
non-monotonic
最好是
UUID
类型。但我的探索表明
@RevisionNumber
注释要求 rev 字段仅接受
int, Integer, Long & long
数据类型。

Hibernate envers 是否支持更改 rev 列的数据类型,如果是,那么如何完成,或者是否有一些替代方法可以在不需要 revinfo 表的情况下实现表的审计机制?

java spring-boot hibernate spring-data-jpa hibernate-envers
2个回答
0
投票

Hibernate Envers 的@RevisionNumber 确实只支持基于整数的数据类型(int、Integer、Long 和 long)。但是,您仍然可以为修订标识符列使用 UUID 数据类型,但是您需要实现自己的自定义修订实体侦听器来生成 UUID 值并将其分配给该列。

以下是可能对您有所帮助的文档链接:

https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#envers


0
投票

遗憾的是,Hibernate Envers 不支持更改 rev 列的数据类型。

@RevisionNumber
注释只能用于 int、Integer、Long 和 long 数据类型。如果您需要使用非单调标识符(例如 UUID)作为修订号,您将需要实现自己的自定义修订实体并使用
@RevisionEntity
注释来指定它。

要实现您的自定义修订实体,您需要创建一个新的实体类来实现

org.hibernate.envers.DefaultRevisionEntity
接口。在此类中,您可以使用
@Id
@GeneratedValue
注释定义自己的自定义修订号字段。您可以为此字段使用 UUID 数据类型。创建自定义修订实体后,您可以使用
@RevisionEntity
注释在需要审核的实体中指定它。

或者,您可以考虑使用不同的审计框架,它支持开箱即用的非单调标识符,例如

Apache Camel's Debezium
。但是,这可能需要对现有代码库和基础架构进行重大更改。

© www.soinside.com 2019 - 2024. All rights reserved.