【问题标题】:Hibernate Envers Get Revision right after Persisting DataHibernate Envers 在持久化数据后立即获得修订
【发布时间】:2023-03-10 18:33:01
【问题描述】:

我正在使用 Spring JPA 将数据持久保存在我的应用程序中。我还使用 Hibernate Envers 为我输入到核心表中的每条记录创建历史记录。我想在 write 事务之后立即获得修订,并向用户展示为他/她刚刚所做的更改创建了哪些修订。

换句话说:

第一步:entity -- persisted --> entity table -- envers --> audit table

第二步:return me the audit version just created

我采取了先持久化数据的方法,然后在单独调用中从审计表中检索最新rev信息。随着用户数量的增加,这最终会变得不一致。

MyEntity mySavedEntity = myEntityRepository.save(myEntity);         
AuditReader reader = AuditReaderFactory.get(entityManager);
List<Number> revisions = reader.getRevisions(MyEntity .class, mySavedEntity.getId());

// ... get the latest revision and pass it back to the user ...

我该如何解决这个问题? - 谢谢

【问题讨论】:

    标签: java hibernate spring-data-jpa spring-data hibernate-envers


    【解决方案1】:

    您可以通过设置 org.hibernate.envers.do_not_audit_optimistic_locking_field to false 让 Envers 记录实体的版本列

    然后在事务之后使用该列和实体的版本属性的值来检索修订。

    【讨论】:

    • 我在课堂上使用@Audited。您是否建议我在实体类中的每个字段上使用@Version 并将该属性设置为false
    • 不,我建议像大多数模型一样有一个乐观锁定列,通过禁用提到的属性在 Envers 中记录该字段,而不是使用 version 属性从 Envers 中找到正确的修订版每次 Envers 存储新版本时,它都会改变。
    【解决方案2】:

    也许你可以使用 ValidityAuditStrategy,你可以检查它here,这会让你知道你的最后一个有效条目,在这种情况下得到最后一个修订。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多