2014-01-08 8 views
1

Я не могу найти правильный запрос для поиска записей аудита на основе строки в качестве первичного ключа. Однако всякая другая функциональность работает нормально с надлежащим аудитом данной таблицы.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

Нет свойства с именем username класс имеет идентификатор. Измените свой код на использование 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()); 
+0

Спасибо, теперь он работает. Я думал, что id применим только к целым id. –

Смежные вопросы