gpt4 book ai didi

java - 获取用户在 hibernate 环境中所做的所有更改

转载 作者:行者123 更新时间:2023-12-02 10:01:31 25 4
gpt4 key购买 nike

在 hibernate envers 中,我可以使用以下代码获取对实体所做的所有更改:

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);
}

}

最佳答案

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

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

添加了 #revisionProperty 方法,以允许在审核域模型中扩展或使用自定义修订实体实例的用户能够添加限制/投影,或者能够根据以下条件对结果进行排序:该模型上的字段。

关于java - 获取用户在 hibernate 环境中所做的所有更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com