【发布时间】: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