Hibernate Envers - 如何搜索字符串主键?

时间:2014-01-08 07:14:00

标签: java spring hibernate hibernate-envers

我无法找到基于字符串作为主键查找审核记录的正确查询。但是,通过对给定表进行适当的审计,所有其他功能都可以正常运行。

以下是我的域对象的代码:

private String userName;
private Date createDate;
private Date modifyDate;

@Id
@Column(name = "user_name", nullable = false, length = 10)
public String getUserName() {
    return this.userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

以下是我正在搜索的查询代码,这里propertyValue是我想要搜索的用户名:

AuditQuery query = reader.createQuery()  
      .forRevisionsOfEntity(targetClass, false, true)
      .add(AuditEntity.revisionType().ge(RevisionType.ADD))
      .add(AuditEntity.property("userName").eq(propertyValue))
      .addOrder(AuditEntity.revisionNumber().desc()); 

    return query.getResultList();

我通过运行此查询获得org.hibernate.QueryException: could not resolve property userName异常。

是否有不同的处理字符串主键的方法?

1 个答案:

答案 0 :(得分:1)

没有名为username的属性,该类具有id。将代码更改为使用AuditEntity.id()而不是AuditEntity.property(..)

AuditQuery query = reader.createQuery()  
  .forRevisionsOfEntity(targetClass, false, true)
  .add(AuditEntity.revisionType().ge(RevisionType.ADD))
  .add(AuditEntity.property("userName").eq(propertyValue))
  .addOrder(AuditEntity.revisionNumber().desc()); 

改为使用

AuditQuery query = reader.createQuery()  
  .forRevisionsOfEntity(targetClass, false, true)
  .add(AuditEntity.revisionType().ge(RevisionType.ADD))
  .add(AuditEntity.id().eq(propertyValue))
  .addOrder(AuditEntity.revisionNumber().desc());