【问题标题】:Auditing @ElementCollection/@Embeddable with hibernate-envers使用 hibernate-envers 审计 @ElementCollection/@Embeddable
【发布时间】:2013-05-06 15:12:27
【问题描述】:

我正在尝试使用 hibernate-envers 审核 @Embeddable 对象的集合。

根据https://hibernate.atlassian.net/browse/HHH-6613 添加了对审核@ElementCollection 的支持。此功能似乎效果不佳:尝试保存具有相同修订号的多个 @Embeddable 对象时会抛出 NonUniqueObjectException。

有人有使用 Envers 审核的 @ElementCollection+@Embeddable 的工作示例吗?

【问题讨论】:

  • 生成的DDL是什么?如果我没记错的话,存储集合和嵌入对象的表应该在所有列+修订号上都有一个索引(因此是唯一键)。
  • 我手动创建了所有 hibernate/envers 表及其索引。可嵌入审计表的索引由所有列+ REV + REVTYPE组成(我注意到嵌入没有REVTYPE = MOD,只有DEL + ADD),因此应该可以插入具有相同修订号的行。据我了解,BD 没有抛出异常,它根本没有进行行插入。它是由 AbstractSaveEventListener 中的 saveWithGeneratedId 引起的。在那里,generateId 仅由 DefaultRevisionEntity、REVTYPE 和 id(连接列)组成,稍后会导致异常。

标签: hibernate-envers


【解决方案1】:

从 Hibernate 5.2.8 开始,我们设法通过以下步骤使其工作:

  1. 将 java 类型定义为 Set 用于可嵌入元素的集合
  2. 在可嵌入元素的类中实现hashCode()equals() 方法
  3. 确保在包含的表中创建一个名为 SETORDINAL 的 int 列 所述元素的审计日志(或让 hibernate 为您创建表 通过设置适当的配置键)。

【讨论】:

  • 欢迎来到stackoverflow!这不是一个很好的答案,因为您实际上并没有写答案,只是粘贴了没有来源的报价。请阅读how to write a good answer
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-04-18
  • 2015-12-14
  • 1970-01-01
  • 2019-11-16
  • 2013-02-08
  • 2018-09-19
相关资源
最近更新 更多