如何在hibernate envers中查询RevisionEntity

时间:2014-09-19 10:00:11

标签: java spring hibernate hibernate-envers

我尝试使用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();

这返回了一个List 在对象数组中,第一个元素是Revision Second是RevisionEntity,第三个是RevisionType,但是RevisionEntity对象中的值都是null。

这是RevisionEntity的pojo

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

}

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您想查询修订实体本身,还是要检索包括修订实体的审计对象?

如果您想查询修订实体本身,它是一个完全正常的实体。只需将其作为所有其他实体进行查询 - 不是通过AuditQuery,而是使用EntityManagerSession

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