0

我们正在使用 Hibernate Envers 进行日志记录,但是需要在我们正在跟踪历史记录的对象上设置事件类型。该属性是必需的,因此我们想到null每次lastEvent未设置时都将其放入。

所以我们尝试设置属性@PrePersist

@PrePersist
public void checkIfLastEventWasModified() {
    if (!lastEventModified) {
        lastEvent = null;
    }
}

但是显然hibernate认为这些拦截器将对象标记为脏或不脏。因此,当此代码在脏检查上运行时,即使对象上没有任何更改,lastEventModified仍然会设置为每次。falselastEventnull

我们还使用 Hibernate 的 EventListener 进行了尝试,但它们在事务之外运行,我们可以设置属性,但它们没有保存到数据库中。

两种解决方案都感觉不对,但我不知道如何以最好的方式解决这个问题。

4

1 回答 1

0

如果您使用的是 3.6.8 以上的 Hibernate 版本,您可能需要创建自己的EntityTrackingRevisionListener( javadoc )。每次更改实体时都会调用它(即每次创建新修订版时),您可以在持久化之前更改由 Envers 审计的实体的属性。

于 2012-07-27T12:31:20.090 回答