Envers:auto_increment(非PK)列未被审计

时间:2016-06-10 08:07:03

标签: mysql hibernate jpa hibernate-envers

我正在实现一个JPA-EJB解决方案,该解决方案使用Hibernate-Envers来审计更改。使用MariaDB 5.5.49。

我有一个表,它有一个auto_increment字段(这不是PK,它只是另一个字段),我这样定义:

@NotNull
@Generated(GenerationTime.INSERT)
@Column(columnDefinition = "integer auto_increment")
private int caseNumber;

我还为mysql需要的字段创建了索引和唯一约束。

不知何故,Envers没有识别这个字段,也没有将caseNumber的值存储在试听表中。正在记录的insert句子保存了我的实体的所有字段,但是这个字段。

有谁知道为什么会这样?该领域的定义有问题吗? Envers与auto_increment不相处吗?

1 个答案:

答案 0 :(得分:1)

此处的问题是@Generated@Column的组合。

@Column的默认行为是将关联的字段/属性映射为 insertable = true,updatable = true 。将@Column@Generated合并后,这会将列注释的行为更改为 insertable = false,updatable = false ,因为意图是该值将是由数据库维护。这影响了Envers生成的映射,因此caseNumber字段的值被认为不可插入也不可更新。

如JIRA HHH-10841中所述,修复方法是简单地检测此用例,并确保Envers映射保持 insertable = true 状态,以便跟踪和推送更改到审计表中的列。