列出上次保存和新保存之间实体类字段级增量的最简单方法



我有一个要求,根据该要求,我必须检测并保存实体类的上次保存和新更改之间的字段级增量,该变量通过JSF前端进行修改。IOW、表单、实体类和DB表可能有X个字段,每次保存时,0到X之间的任何位置都可以更改。我需要在每次保存时找到所有有更改的内容,并将其记录在某个地方以进行审计。

起初我想修改每个设置器:

@Transient
private Set<String> changes;
...
public void setSomeField(String _newval) {
    if(!_newval.equals(this.someField)){
        this.changes.add("SOME_FIELD");
    }
    this.someField = _newval;
}

这将需要在每个setter中实现这种非优雅的delta检测逻辑,我不喜欢它。有没有一种简单的方法可以使用JPA函数来区分新状态和持久状态,该函数会给我一个所有字段更改的列表,然后我可以将其转储到我的审计日志存储中?

听起来像是一个完美的拦截器与注释的结合。创建一个,注释实体(类级别会很好,但方法级别(setters)我认为是可以接受的),所有的工作都会自动完成。记录结果的内容和时间取决于您,但这可能在entitylistener中。

但是为什么不使用Envers呢?它不包括所有这些(独立于afaik jpa实现)

最新更新