Java 如何获取列的列表字符串在Hibernate Envers中更改为ModifiedFlag=true

Java 如何获取列的列表字符串在Hibernate Envers中更改为ModifiedFlag=true,java,hibernate,spring-data-jpa,hibernate-envers,Java,Hibernate,Spring Data Jpa,Hibernate Envers,我使用Hibernate Envers和“withModifiedFlag=true”作为表“user”,列_mod是用布尔数据生成的。但我无法通过代码或获取方式获取已更改列的列表。这是最初包含在Envers 6.0中的一项功能,但我们将其作为Envers 5.3的一部分作为的一部分进行了备份。因此,只要您至少使用Hibernate 5.3.0.Final或更高版本,您就应该可以访问此功能 下面的一个简单示例说明了如何按id获取给定实体类的所有修订 List results = AuditRea

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

这是最初包含在Envers 6.0中的一项功能,但我们将其作为Envers 5.3的一部分作为的一部分进行了备份。因此,只要您至少使用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:版本的版本类型,例如
    ADD
    MOD
    DEL
  • 3:一个
    集合
    集合,其中包含在该修订版中修改的所有属性名称
下面给出了一个简单的实体

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

如果在修订期间修改了该属性,则
将包含字符串
名称
。请务必注意,集合中不包含列名,而是包含属性名。

您缺少一个问题。当您添加时,请同时添加:您迄今为止为解决问题所做的努力。这怎么不起作用。你的经历和你的期望。还有你自己进行的关于这个问题的研究的结果。已经谢谢了。谢谢@Ben的支持。我创建了一个对象“user”,并希望在数据库mySQL中跟踪更改的历史。我使用Hibernate Envers(版本5.3.1),为“user”对象设置annotation@Audited(withModifiedFlag=true),然后使用列“user\u aud”表“user\u mod is work fine”(布尔数据)。我曾尝试使用AuditReader,但我只得到AuditQuery和修订版的数据。我想获取表“user\u aud”中更改的列的名称(值=1)。如何在“user\u aud”表中更改修订的列名?