2011-02-24 3 views
3

감사를 위해 최대 절전 모드를 사용합니다.Hibernate Envers : 리비전을 질의하는 중 문제가 발생했습니다.

이제
@Entity 
@Audited 
public class Child 
{ 
    @GeneratedValue 
    @Id 
    @Column 
    private Long id; 

    @Column 
    private String test; 

    // getters & setters 
} 

이 같은 개정을 조회하고 싶습니다 :

query = reader.createQuery().forRevisionsOfEntity(Child.class, false, true); 
query.add(AuditEntity.property("test").eq("child1")); 

Long id = ...; 
query = reader.createQuery().forRevisionsOfEntity(Child.class, false, true); 
query.add(AuditEntity.property("id").eq(id)); 

첫 번째 쿼리가 작동, 두 번째는 다음과 같은 예외가 발생합니다 실행 :

java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Map 
    at org.hibernate.property.MapAccessor$MapGetter.get(MapAccessor.java:118) 
    at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:77) 
    at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:83) 
    at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:381) 
    at org.hibernate.type.ComponentType.nullSafeGetValues(ComponentType.java:354) 
    at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:309) 
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67) 
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:567) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1612) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:717) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) 
    at org.hibernate.loader.Loader.doList(Loader.java:2294) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172) 
    at org.hibernate.loader.Loader.list(Loader.java:2167) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:448) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 
    at org.hibernate.envers.query.impl.AbstractAuditQuery.buildAndExecuteQuery(AbstractAuditQuery.java:95) 
    at org.hibernate.envers.query.impl.RevisionsOfEntityQuery.list(RevisionsOfEntityQuery.java:104) 
    at org.hibernate.envers.query.impl.AbstractAuditQuery.getResultList(AbstractAuditQuery.java:101) 

내 기업은 다음과 같습니다 왜 이것이 ClassCastException으로 연결되는지 알 수 없습니다. 어떤 생각, 내가 뭘 놓치고있어?

답변

7

두 감사 대상의 ID를 비교할 때는 AuditEntity.property() 대신 AuditEntity.id()을 사용하십시오.

5

_aud 테이블의 항목 ID는 엔티티 ID, REV 및 REVTYPE으로 이루어 지므로이 값은 3 개의 값으로 구성됩니다. AuditEntity.id()를 사용하는 것이 가장 좋지만 AuditEntity.property ("id.id")를 사용하면

이됩니다.
관련 문제