如何从Hibernate Envers中的客户RevisionEntity查询?

时间:2014-08-12 05:52:37

标签: java hibernate hibernate-envers

我正在使用Hibernate Envers,我的客户RevisionEntity是:

@Entity
@RevisionEntity(SimpleListener.class)
@Table(name = "data_rev_info")
public class SimpleRevisionEntity {
    @Id
    @GeneratedValue
    @RevisionNumber
    @Column(name = "revision_id")
    private long id;

    @RevisionTimestamp
    @Column(name = "revision_timestamp")
    private Date timestamp;
    /**
     * @return the id
     */
    public long getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }
    /**
     * @return the timestamp
     */
    public Date getTimestamp() {
        return timestamp;
    }
    /**
     * @param timestamp the timestamp to set
     */
    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }
}

我可以使用auditReader获取特定修订版ID的审核时间

AuditReader auditReader = AuditReaderFactory.get(em);
Date date = auditReader.getRevisionDate(n);

如果我在SimpleRevisionEntity中添加一个additonal字段,名为actor(type是String),如何使用AuditReader获取此addtional字段? 另外,如果我想查询过去五分钟中生成的审核日志,该怎么做?

1 个答案:

答案 0 :(得分:1)

要获取actor字段的值,您需要找到修订实体。这是一个普通的实体,因此您可以使用Hibernate或使用AuditReader.findRevision(revisionEntityClass, revision)方法通过id查找它。

至于查询过去5分钟内生成的修订,我会对修订实体进行查询,指定timestamp列必须是>= NOW()-5 minutes(当然是伪代码:) )。