我正在使用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可能会按照每个版本的每个客户插入不同类型的记录(add
,modify
或delete
。
主键可能只是包含合成主键的另一列。
Hibernate Envers管理的审核表的真正主键是什么?
答案 0 :(得分:0)
根据the documentation中的示例判断,我的示例中的主键似乎是(REVISION_ID
,CUSTOMER_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)***
);