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

恩维尔斯:auto_increment(非 PK)列未被审核

漆雕誉
2023-03-14

我正在实现一个 JPA-EJB 解决方案,该解决方案使用Hibernate-恩维尔斯来审核更改。使用玛丽亚DB 5.5.49.

我有一个表,它有一个< code>auto_increment字段(这不是PK,只是另一个字段),我是这样定义的:

@NotNull
@Generated(GenerationTime.INSERT)
@Column(columnDefinition = "integer auto_increment")
private int caseNumber;

我还按照mysql的要求为这个字段创建了一个索引和一个惟一的约束。

不知何故,Envers 无法识别此字段,并且不会在试镜表中存储 caseNumber 的值。正在记录的插入句子保存了我的实体的所有字段,但这个字段除外。

有谁知道为什么会发生这种情况?字段的定义有问题吗?恩维尔斯和auto_increment相处不好吗?

共有1个答案

方嘉志
2023-03-14

这里的问题是< code>@Generated和< code>@Column的组合。

@Column的默认行为是将关联的字段/属性映射为可插入 =true、可更新 = true。将@Column@Generated结合使用时,这会将列批注的行为更改为可插入 = false,可更新 = false,因为其目的是该值将由数据库维护。这影响了 Envers 生成的映射,因此您的 caseNumber 字段的值仅被视为不可插入或不可更新。

正如JIRA HHH-10841中提到的,修复方法是简单地检测这个用例,并确保Envers映射保持insertable=true状态,以便跟踪更改并将其推送到审计表中的列。

 类似资料:
  • 是否可以在CustomEntityTrackingListener或CustomRevsionListener中捕获正在修改的实体(Book)? 我试图获取通过API/save book或/update/{id}/{pages}传递的所有信息,而不仅仅是版本信息。 在 envers 审核实体时,它会自动为每个实体创建一个_AUD表和一个修订表,以连接实体及其_AUD表 使用自定义的修订监听程序,我

  • 我肯定遗漏了一些显而易见的东西;然而,我正在努力寻找一个答案来解决我与Hibernate Envers之间的问题。 假设我有一个名为MyObject的实体类,它是使用envers审计的。 如果我得到MyObject实例的当前副本,执行以下操作: 我得到了相同实例的历史副本(来自修订版2): 有没有办法区分myobject1和myobject2?我怎么知道myobject1是当前副本,myobjec

  • 我正在我的项目中实现Hibernate Envers,对于这个客户端,数据库中的表和列必须遵循特定的名称模式。name模式使用表名来生成列名的一部分,保存修订的表与原始表有不同的名称(当然),因此我需要能够更改Envers生成的表的列名。 如何更改实体试听表的列名称? 我正在使用Hibernate 4.3.11-FINAL 我毫不费力地喊出修订表(REVINFO)名称,也没有列实体的试镜表名称

  • 可以在一个集合/json? 使用者- 用户:id | name post:id |用户| id |文本 postimage: id|post_id|imgpath 用户模型: 帖子模式: 从用户处获取所有帖子工作正常: 我能够在一个循环内从帖子中获取所有图像 我想要的是得到所有的帖子,没有循环的图像,例如 谢啦

  • 我试图用axios从VueJS到Laravel,这是我的API。 我得到了这个错误:

  • vesta 是一款集容器扫描,Docker和Kubernetes配置基线检查于一身的工具。检查内容包括镜像或容器中包含漏洞版本的组件,Docker以及Kubernetes的危险配置。vesta同时也是一个灵活,方便的工具,能够在各种系统上运行,机器内1 vCPU, 2G Memory即可,包括但不限于Windows,Linux以及MacOS 检查项 Scan 扫描通过主流安装方法安装程序的漏洞 a