【问题标题】:Hibernate Envers - custom RevisionEntity - how to get recordHibernate Envers - 自定义 RevisionEntity - 如何获取记录
【发布时间】:2016-10-19 23:41:39
【问题描述】:

我已经编写了我的自定义 RevisionEntity 类来存储其他数据(例如用户名),如下所示:

@Entity
@RevisionEntity(AuditListener.class)
@Table(name = "REVINFO", schema = "history")
@AttributeOverrides({ 
        @AttributeOverride(name = "timestamp", column = @Column(name = "REVTSTMP")),
        @AttributeOverride(name = "id", column = @Column(name = "REV")) })
public class AuditEntity extends DefaultRevisionEntity {

    private static final long serialVersionUID = -6578236495291540666L;

    @Column(name = "USER_ID", nullable = false)
    private Long userId;

    @Column(name = "USER_NAME")
    private String username;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

我可以看到数据库中的所有行都正确存储,REVINFO 表也包含用户名。

我想查询数据库以从我的自定义 RevisionEntity 中获取详细信息,例如用户名。 我该怎么做?是否有任何支持的 API 来获取它?

【问题讨论】:

    标签: hibernate-envers


    【解决方案1】:

    假设您知道您对修订实体元数据感兴趣的实体的标识符,您可以使用以下方法轻松查询该信息:

    final AuditReader auditReader = AuditReaderFactory.get( session );
    List<?> results = auditReader.createQuery()
         .forRevisionsOfEntity( YourEntityClass.class, false, false )
         .add( AuditEntity.id().eq( yourEntityClassId ) )
         .getResultList();
    

    返回的结果将包含一个 Object 数组,例如Object[] 其中results[1] 将保存修订实体实例,其中包含您想要的相关信息。

    更多细节可以看java文档cmetshere

    如果你只有修订号,你可以通过以下方式直接访问修订实体实例:

    // I use YourAuditEntity here because AuditEntity is actually an Envers class
    YourAuditEntity auditEntity = auditReader
       .findRevision( YourAuditEntity.class, revisionId );
    

    关于AuditReader接口的更多细节,可以查看java文档here

    【讨论】:

    • 我猜YourEntityClass.class 不是指AuditEntity.class,对吧?我没有YourEntityClass.class 也没有yourEntityClassId,我只有revisionId。而 IMO 应该足以让 envers 获得审计实体的公共对象。
    • 更新参考了一个 API,它只接受修订实体类类型和修订号,如您所指出的。
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多