我有一个声明为Map<MyEnum, String>
的字段,经过审核。当对地图中的某个元素进行更改时,会生成两个编辑,即ADD
和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);
我正在使用Hibernate v3.5.6。
我无法找到任何关于此的错误报告,所以我在想我做错了什么......有什么想法吗?
答案 0 :(得分:0)
如果查看AbstractCollectionMapper.mapCollectionChanges,当前实现只会执行添加和删除。我认为地图被视为元组的集合:(键,值),所以从来没有任何修改。然后该错误在模式生成中,应该正确生成密钥。请提交JIRA错误 - https://hibernate.onjira.com,Envers组件。