2014-01-08 2 views
1

문자열을 기본 키로 사용하여 감사 레코드를 찾는 적절한 쿼리를 찾을 수 없습니다. 그러나 다른 모든 기능은 주어진 테이블을 적절히 감사하면 올바르게 실행됩니다. 여기 최대 절전 모드 Envers - 문자열 기본 키를 검색하는 방법?

내 도메인 개체의 코드입니다 :

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(); 
:

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 내가 검색하고자하는 사용자의 이름입니다

이 쿼리를 실행하여 org.hibernate.QueryException: could not resolve property userName 예외가 발생했습니다.

문자열 기본 키를 처리하는 다른 방법이 있습니까?

답변

1

클래스에는 ID가있는 username이라는 속성이 없습니다. AuditEntity.property(..) 대신 AuditEntity.id()을 사용하도록 코드를 변경하십시오.

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에만 적용 가능하다고 생각하곤했다. –