Hibernate Envers - 自定义 RevisionEntity - 如何获取记录
Hibernate Envers - custom RevisionEntity - how to get record
我已经编写了我的自定义 RevisionEntity class 来存储额外的数据(例如用户名),如下所示:
@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 table 还包含用户名。
我想查询数据库以从我的自定义 RevisionEntity 中获取详细信息,例如用户名。
我该怎么做?有没有支持的API可以获取?
假设您知道对其修订实体元数据感兴趣的实体的标识符,您可以使用以下方法轻松查询该信息:
final AuditReader auditReader = AuditReaderFactory.get( session );
List<?> results = auditReader.createQuery()
.forRevisionsOfEntity( YourEntityClass.class, false, false )
.add( AuditEntity.id().eq( yourEntityClassId ) )
.getResultList();
返回的结果将包含一个对象数组,例如Object[]
其中 results[1]
将保存包含您想要的相关信息的修订实体实例。
更多细节可以看java文档注释here
如果您只有修订号,您可以通过以下方式直接访问修订实体实例:
// I use YourAuditEntity here because AuditEntity is actually an Envers class
YourAuditEntity auditEntity = auditReader
.findRevision( YourAuditEntity.class, revisionId );
有关 AuditReader 接口的更多详细信息,您可以查看 java 文档 here
我已经编写了我的自定义 RevisionEntity class 来存储额外的数据(例如用户名),如下所示:
@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 table 还包含用户名。
我想查询数据库以从我的自定义 RevisionEntity 中获取详细信息,例如用户名。 我该怎么做?有没有支持的API可以获取?
假设您知道对其修订实体元数据感兴趣的实体的标识符,您可以使用以下方法轻松查询该信息:
final AuditReader auditReader = AuditReaderFactory.get( session );
List<?> results = auditReader.createQuery()
.forRevisionsOfEntity( YourEntityClass.class, false, false )
.add( AuditEntity.id().eq( yourEntityClassId ) )
.getResultList();
返回的结果将包含一个对象数组,例如Object[]
其中 results[1]
将保存包含您想要的相关信息的修订实体实例。
更多细节可以看java文档注释here
如果您只有修订号,您可以通过以下方式直接访问修订实体实例:
// I use YourAuditEntity here because AuditEntity is actually an Envers class
YourAuditEntity auditEntity = auditReader
.findRevision( YourAuditEntity.class, revisionId );
有关 AuditReader 接口的更多详细信息,您可以查看 java 文档 here