我在所有Entity属性上都有 @Audited(withModifiedFlag = true)
注释,需要在Audit表中捕获 . 除了值删除之外,它适用于所有情况 . 含义,如果我的列的值从NULL / INT设置为某个非空值,则相应的 modifiedColumn
值设置为1,但如果该值从任何INT值设置为NULL,则 modifiedColumn
设置为0 (表示未修改) . 我不知道为什么会这样 . 我已经检查了Envers文档以及Envers打开问题列表,但没有找到任何相关信息 .
顺便说一句,我使用Hibernate和Hibernate-Envers 4.1.12.Final版本 .
Update 1
这是我的实体细节:
@Entity
@Audited(withModifiedFlag = true)
@AuditTable("AuditLatency")
public class Latency {
@Id
@Column(name = "Id")
private Long id;
@Column(name = "DataCenter1")
private Long dataCenter1;
@Column(name = "DataCenter2")
private Long dataCenter2;
@Column(name = "DataCenter3")
private Long dataCenter3;
@Column(name = "StatusId")
@Type(type = "enum_status_active_inactive_type")
private Status statusId;
//getXXX() & setXXX()
}
审计表结果:
请注意,在每个修订版中,即使其中一个列更新了所有其他标志设置为1(true) . 并且,对于NULL值,标志设置为0 .
谢谢阅读!
1 回答
你的场景一定有问题 .
我在4.1.12.Final上使用了以下实体映射和代码,并观察到修改后的标志设置正确 .
所有
getRevisionValueModifiedFlag
都会使用以下内容执行本机查询:如果您的实体更复杂或您的业务逻辑更复杂,一旦您共享该信息,我将相应地更新此答案 .