Envers为Map<>生成“添加”+“删除”编辑而不是“修改”

时间:2012-06-19 17:57:59

标签: hibernate-envers

我有一个声明为Map<MyEnum, String>的字段,经过审核。当对地图中的某个元素进行更改时,会生成两个编辑,即ADDDEL,而不是单个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);

我正在使用Hibernate v3.5.6。

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

1 个答案:

答案 0 :(得分:0)

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