【问题标题】:Fetching all changes made by a user in hibernate envers获取用户在休眠环境中所做的所有更改
【发布时间】:2019-08-30 07:45:26
【问题描述】:

在休眠环境中,我可以使用以下代码获取对实体所做的所有更改:

AuditQuery aq = auditReader.createQuery().forRevisionsOfEntityWithChanges(DummyEntity.class, false);

但是有没有办法获取特定用户对所有实体所做的所有更改?

我正在使用以下实体来存储修订信息:

@RevisionEntity(UserRevisionListener.class)
@Entity(name = "env_audit_envers_info")
public class AuditEnversInfo extends DefaultRevisionEntity {

    private static final long serialVersionUID = -7604731515258123883L;

    @Column(name = "user_id")
    private String userId;

    public String getUserId() {
        return userId;
    }

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

}

每次更改都会使用以下监听器添加此模型的条目:

public class UserRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        AuditEnversInfo auditEnversInfo = (AuditEnversInfo) revisionEntity;
        Optional<Authentication> auth = Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication());
        String username = auth.isPresent() ? auth.get().getName() : "anonymoususer@email.com";
        auditEnversInfo.setUserId(username);
    }

}

【问题讨论】:

    标签: java spring-boot hibernate-envers audit-logging


    【解决方案1】:

    AuditEntity#revisionProperty 方法正是您要寻找的:

    List results = auditReader.createQuery()
      .forRevisionsOfEntityWithChanges( DummyEntity.class, false )
      .add( AuditEntity.revisionProperty( "userId" ).eq( userId ) )
      .getResultList();
    

    添加了#revisionProperty 方法以允许在其审计域模型中扩展或使用自定义修订实体实例的用户能够添加限制/预测或能够基于该模型上的字段对结果进行排序。

    【讨论】:

    • 完美!谢谢:)
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多