1

我有一个声明为 a 的字段Map<MyEnum, String>,该字段已被审核。当对映射中的一个元素进行更改时,会生成两个编辑, anADD和 a DEL,而不是单个MOD,这反过来意味着尝试插入审计表时违反约束,因为有两个编辑对于同一修订中的单个实体中的单个字段。

我猜我可能可以通过制作revision_type表的键的一部分来解决这个问题(这将允许每个实体的每个字段的每种类型进行一次编辑),但这似乎是一个丑陋的黑客,除了我忘记了哪个首先发生了,事实是它是错误的。

顺便说一句,该字段正在正确保存……只是审核记录失败了。

字段声明:

@ElementCollection
@CollectionTable(name = "configuration_property", joinColumns = @JoinColumn(name = "configuration_id"))
@MapKeyColumn(name = "property_name")
@Column(name = "property_value", columnDefinition = "longtext")
@MapKeyEnumerated(EnumType.STRING)
private Map<ConfigurationProperty, String> properties = new EnumMap<ConfigurationProperty, String>(ConfigurationProperty.class);

我正在使用休眠 v3.5.6。

我还没有找到任何关于此的错误报告,所以我认为我做错了什么......有什么想法吗?

4

1 回答 1

0

如果您查看 AbstractCollectionMapper.mapCollectionChanges,当前的实现只进行添加和删除。我认为地图被视为元组的集合:(键,值),所以从来没有任何修改。然后错误出现在模式生成中,它应该正确生成密钥。请提交 JIRA 错误 - https ://hibernate.onjira.com,Envers 组件。

于 2012-07-04T07:34:51.333 回答