【问题标题】:How to get list string of column is changed in Hibernate Envers withModifiedFlag = true如何在 Hibernate Envers withModifiedFlag = true 中更改列的列表字符串
【发布时间】:2018-12-01 20:09:47
【问题描述】:

我对表“user”使用带有“withModifiedFlag = true”的 Hibernate Envers,_mod 列是用布尔数据生成的。但我无法通过代码或获取方式获取更改列的列表。

【问题讨论】:

  • 您错过了一个问题。添加时请同时添加:到目前为止您为解决问题所做的尝试。那怎么行不通。你所经历的和你所期望的。还有你自己对这个问题进行的研究的结果。已经谢谢了。
  • 感谢@Ben 的支持。我创建了一个对象“用户”并希望跟踪数据库 mySQL 中的更改历史记录。我使用了 Hibernate Envers(版本 5.3.1),为“user”对象设置注释 @Audited(withModifiedFlag = true),然后使用列 _mod 的表“user_aud”工作正常(布尔数据)。我曾尝试使用 AuditReader,但我只获得 AuditQuery 和修订数据。我想获取表“user_aud”中更改的列的名称(值 = 1)。如何在表“user_aud”中获取修改的列名?

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


【解决方案1】:

这是最初包含在 Envers 6.0 中的一项功能,但我们将其作为 Envers 5.3 的一部分作为HHH-8058 的一部分进行了反向移植。因此,只要您至少使用 Hibernate 5.3.0.Final 或更高版本,您就应该可以使用此功能。

下面的一个简单示例说明了如何通过 id 获取给定实体类的所有修订。

List results = AuditReaderFactory.get( session ).createQuery()
  .forRevisionsOfEntityWithChanges( YourEntityClass.class, false )
  .add( AuditEntity.id().eq( entityId ) )
  .getResultList();

这将返回一个包含以下内容的对象数组元素列表

  • 0:该版本的实体实例。
  • 1:修订实体实例,例如DefaultRevisionEntity 或您的自定义修订实体。
  • 2:修订的修订类型,例如ADDMODDEL
  • 3:Set<String> 集合,其中包含在该修订版中修改的所有属性名称。

所以给定以下简单实体

@Entity
@Audited(withModifiedFlag = true)
public class SimpleEntity {
  @Id
  private Integer id;
  @Column(name = "ENTITY_NAME")
  private String name;
}

如果在修订期间修改了该属性,Set<String> 将包含字符串 name。请务必注意,该集合包含列名,而是包含属性名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2011-08-17
    • 2017-02-24
    相关资源
    最近更新 更多