首页 文章

Hibernate Envers管理的审计表的主键是什么?

提问于
浏览
0

我正在使用Hibernate Envers来审计一些实体 . 我手动创建了关联的审计表 . 但是,我无法确定审计表的主键应该是什么 . 例如,考虑一个旨在存储客户的虚构表:

CREATE TABLE CUSTOMER
(
    CUSTOMER_ID   INTEGER,
    CUSTOMER_NAME VARCHAR(100),

    PRIMARY KEY (CUSTOMER_ID)
)

然后创建审计表:

CREATE TABLE CUSTOMER_REVISION
(
    REVISION_ID      INTEGER,
    REVISION_TYPE_ID INTEGER,
    CUSTOMER_ID      INTEGER,
    CUSTOMER_NAME    VARCHAR(100),

    PRIMARY KEY (???)
)

以下是我考虑的选项:

主键:REVISION_ID

这不能是主键,因为在同一修订版本中可能会修改同一类的多个实体 .

主键:(REVISION_ID,CUSTOMER_ID)

这似乎更有可能,但我不确定Envers是否会为每个版本的每个客户插入多条记录 .

主键:(REVISION_ID,REVISION_TYPE_ID,CUSTOMER_ID)

这看起来有点矫枉过正,但Envers可能会为每个客户的每个版本插入不同类型的记录( addmodifydelete ) .

主键:新列

也许主键必须只是包含合成主键的另一列 .


What is the true primary key of an audit table managed by Hibernate Envers?

1 回答

  • 0

    the documentation中的示例来看,我的示例中的主键似乎是( REVISION_IDCUSTOMER_ID ) . 以下是文档中的示例:

    create table Address (
        id integer generated by default as identity (start with 1),
        flatNumber integer,
        houseNumber integer,
        streetName varchar(255),
        primary key (id)
    );
    
    create table Address_AUD (
        id integer not null,
        REV integer not null,
        flatNumber integer,
        houseNumber integer,
        streetName varchar(255),
        REVTYPE tinyint,
        ***primary key (id, REV)***
    );
    

相关问题