将 JDK 从 11 升级到 21,将 Hibernate Envers 升级到 6.4.4.Final 后,在将数据保存到审计表时遇到以下错误:
org.springframework.dao.DataIntegrityViolationException:无法执行语句[错误:重复的键值违反了唯一约束“revinfo_pkey”
我正在使用 @Audited 和 @EntityListeners(AuditingEntityListener.class) 创建审计表。我已经有多个审计表和一个包含现有条目的 rev_info 表。发生错误的原因是插入过程没有附加到 revinfo 表的末尾,而是从头开始,导致间歇性重复键违规。理想情况下,它应该在最后一个条目之后开始插入。
如何解决这个问题?
我尝试进一步升级来解决此问题,但问题仍然存在。我不想清理所有审计表,因为它们包含 rev 列,这些 rev 列是引用 revinfo 表的外键。
我的目标是恢复以前的行为,即 revinfo 表中的新条目遵循最后一个现有条目,而不会导致密钥重复。
我的审计表中也面临同样的问题。我正在使用 @RevisionEntity(RevisionListenerImpl.class) 创建一个名为 CustomRevision 的表,它扩展了 DefaultRevisionEntity,它是 hibernate envers 提供的映射超类。超类包含我的 CustomRevision 类的 id 属性。我的 CustomRevision 表中已经有 2400 个条目,但是当在我的应用程序上调用 POST api 时,它会引发 409 冲突并出现以下错误:
错误:重复的键值违反了唯一约束“aud_revision_pkey” 详细信息:密钥 (id)=(2401) 已存在。 无法执行语句[错误:重复的键值违反了唯一约束“aud_revision_pkey”'