2011-02-24 14 views
3

私はHibernate Enversを監査に使用しています。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")も同様です。

関連する問題