【问题标题】:Hibernate: require a property to be set for loggingHibernate:需要为日志记录设置一个属性
【发布时间】:2012-06-21 14:27:19
【问题描述】:

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

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

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

但显然hibernate认为这些拦截器将对象标记为脏或不脏。所以当这段代码在脏检查上运行时,lastEventModified 仍然是false 并且每次都将lastEvent 设置为null,即使对象上没有任何变化。

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

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

【问题讨论】:

    标签: hibernate hibernate-envers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 2011-10-18
      • 2018-03-20
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多