Java 如何在hibernate envers中查询RevisionEntity

Java 如何在hibernate envers中查询RevisionEntity,java,spring,hibernate,hibernate-envers,Java,Spring,Hibernate,Hibernate Envers,我试图用Envers创建的修订版记录其他用户数据。我可以使用RevisionEntity和RevisionListener实现这一点,但我无法检索记录的数据。 我尝试了以下代码 AuditQuery auditQuery = AuditReaderFactory .get(factory.getCurrentSession()).createQuery() .forRevisionsOfEntity(Currency.class, fals

我试图用Envers创建的修订版记录其他用户数据。我可以使用RevisionEntity和RevisionListener实现这一点,但我无法检索记录的数据。 我尝试了以下代码

    AuditQuery auditQuery = AuditReaderFactory
            .get(factory.getCurrentSession()).createQuery()
            .forRevisionsOfEntity(Currency.class, false, false)
            .add(AuditEntity.id().eq("ENV_US"));

    List<Object[]> l = auditQuery.getResultList();

如果我做错了什么,请告诉我。

是否要查询修订实体本身,或检索包括修订实体在内的已审核对象

如果要查询修订图元本身,它是一个完全正常的图元。只需将其作为所有其他实体进行查询—不是通过
审核查询
,而是使用
实体管理器
会话


如果要检索包括修订实体在内的已审核对象,则上述内容是正确的,前提是对象更改时的修订存在修订数据。您是否在数据库中看到与返回的修订相对应的数据?

您可能需要实际使用该对象。Hibernate/Envers将返回一个惰性初始化对象,调试器可能无法看到这些值。在代码中调用getter后,应填充正确的值。

是的,在数据库中创建了版本,一个使用revetype ADD,另一个用于更新。在查询列表中,我也得到了正确的revtype对象,但是RevisionEntity的对象都是Blank(在UserId中为null,rev和revtstmp为0)。当时不知道,可能是bug,但如果没有调试,很难说。
@Entity
@Table(name = "REVINFO")
@RevisionEntity(RevListener.class)
public class ExampleRevEntity {
@Id
@GeneratedValue
@RevisionNumber
@Column(name = "REV")
private int rev;

@RevisionTimestamp
@Column(name = "REVTSTMP")
private long revtstmp;

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

public String getUserId() {
    return userId;
}

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

}