当前位置: 首页 > 知识库问答 >
问题:

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

任伟
2023-03-14

我正在使用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 (???)
)

以下是我考虑的选择:

这不能是主键,因为同一修订期间可能会修改同一类的多个实体。

这似乎更有可能,但我不确定Envers是否会在每次修订中为每个客户插入多条记录。

这似乎有些过分,但Enver可能会在每次修订时为每个客户插入不同类型的记录(添加修改删除)。

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

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

共有2个答案

钱震博
2023-03-14

审计表的主键是审计表的原始 id(id) 和修订号(rev) 的组合。作为官方文档,给定实体实例在给定修订版中最多只能有一个历史条目,这仅表示上述两列的唯一组合。

慕容俭
2023-03-14

从文档中的示例来看,我示例中的主键似乎是(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)***
);
 类似资料:
  • 企业微信提供丰富的审批模板和精细化的审批设置,帮助你为企业办公定制更规范高效的审批流程。 审批模板设置 设置入口:【管理后台】>【企业应用】>【审批】>【添加模板】查看 1 / 添加模板 企业微信内置了请假、报销、费用等多达20余种审批模板,覆盖企业日常办公需要。若系统系统的模板不足以满足需求,你可以通过添加全新的自定义模板,进行深度定制。 2 / 模板设置 点击需要设计的目标模板,在顶部Tab中

  • 问题内容: 在设计表时,我养成了一种习惯,即有一列是唯一的,并且我将其作为主键。这可以通过三种方式来实现,具体取决于需求: 自动递增的标识整数列。 唯一标识符(GUID) 可以用作行标识符列的短字符(x)或整数(或其他相对较小的数字类型)列 数字3将用于较小的查找,大多数是读取的表,这些表可能具有唯一的静态长度字符串代码或数字值,例如年份或其他数字。 在大多数情况下,所有其他表将具有自动递增的整数

  • 本文向大家介绍什么是主键?什么是外键?相关面试题,主要包含被问及什么是主键?什么是外键?时的应答技巧和注意事项,需要的朋友参考一下 主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

  • 我的项目中有几个类是由Hibernate处理的,有些是由Envers审核的,有些则不是。现在,当我试图保存某个未经审计的实体时,我得到了以下信息: 有些人可能认为我的数据库中没有审计表,但是Envers甚至不应该试图寻找这个表,因为实体没有被审计。我的类看起来像这样: 因此,每个类都包含一个子类列表,其中包含对其父类的引用。这些类都没有用-注释标记,但它们引用了一些已审核的实体。然而,每个引用都用

  • 不是每个问题都有技术性的答案。我曾经诊断过一台服务器,它对 ping、SSH 或控制台连接均无响应。 我不能确定这到底是硬件故障还是软件故障。 当我电话询问主机所在位置的站点客服时,奥秘最终被揭开了。他们告诉我: 先期抵达的两名不明身份的男子,进入大厦直奔服务器机房,拔下了机器,并轻易地将机器带出了大厦。 后来我们发现,在机房所在的地区(Missouri,M.O.)曾发生过一连串的电脑失窃案。 从

  • 本文向大家介绍什么是OpenStack 开源的云计算管理平台项目,包括了什么是OpenStack 开源的云计算管理平台项目的使用技巧和注意事项,需要的朋友参考一下 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。 OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。