我正在使用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
) .
主键:新列
也许主键必须只是包含合成主键的另一列 .
What is the true primary key of an audit table managed by Hibernate Envers?
1 回答
从the documentation中的示例来看,我的示例中的主键似乎是(
REVISION_ID
,CUSTOMER_ID
) . 以下是文档中的示例: