我正在实现一个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不相处吗?
答案 0 :(得分:1)
此处的问题是@Generated
和@Column
的组合。
@Column
的默认行为是将关联的字段/属性映射为 insertable = true,updatable = true 。将@Column
与@Generated
合并后,这会将列注释的行为更改为 insertable = false,updatable = false ,因为意图是该值将是由数据库维护。这影响了Envers生成的映射,因此caseNumber
字段的值被认为不可插入也不可更新。
如JIRA HHH-10841中所述,修复方法是简单地检测此用例,并确保Envers映射保持 insertable = true 状态,以便跟踪和推送更改到审计表中的列。