我们正在使用Hibernate Envers进行日志记录,但是需要在我们跟踪历史记录的对象上设置事件类型。该属性是必需的,因此我们有意在每次null
未设置时将其置于lastEvent
。
因此我们尝试使用@PrePersist
@PrePersist
public void checkIfLastEventWasModified() {
if (!lastEventModified) {
lastEvent = null;
}
}
但是显然hibernate认为这些拦截器将对象标记为脏或不。因此,当在脏检查上运行此代码时,lastEventModified
仍为false
,lastEvent
每次都会设置为null
,即使对象上没有任何更改。
我们也尝试使用Hibernate的EventListeners,但是它们在事务外部运行,我们可以设置属性,但是它们没有保存到数据库中。
两种解决方案都感觉不对,但我不知道如何以最佳方式解决这个问题。
答案 0 :(得分:0)
如果您使用的是3.6.8以上的Hibernate版本,则可能需要创建自己的EntityTrackingRevisionListener
(javadoc)。每次更改实体时(即每次创建新修订版本时)都会调用它,并且您可以在保留之前更改由Envers审核的实体的属性。