Hibernate:需要为日志记录设置属性

时间:2012-06-21 14:27:19

标签: hibernate hibernate-envers

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

因此我们尝试使用@PrePersist

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

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

我们也尝试使用Hibernate的EventListeners,但是它们在事务外部运行,我们可以设置属性,但是它们没有保存到数据库中。

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

1 个答案:

答案 0 :(得分:0)

如果您使用的是3.6.8以上的Hibernate版本,则可能需要创建自己的EntityTrackingRevisionListenerjavadoc)。每次更改实体时(即每次创建新修订版本时)都会调用它,并且您可以在保留之前更改由Envers审核的实体的属性。