休眠启用审核查询:选择最新的实体修订版,其中所有实体的字段均等于值

时间:2019-08-05 20:41:25

标签: sql hibernate spring-data-jpa hibernate-envers

我试图选择每个trackedResource实体的最新版本,其中position_source_feed_id具有特定值。

我有一个功能齐全的PostgreSQL查询:

select tr0.*
from
    trackedresource_aud tr0
where
    tr0.position_source_feed_id='7870b8b9-4b98-4ea7-8fb8-99746d7f0e85'
and
    tr0.rev=(
        select
            max(tr1.rev)
        from
            trackedresource_aud tr1
        where
            tr1.id=tr0.id
        and
            tr1.position_source_feed_id=tr0.position_source_feed_id
    )
order by
    tr0.rev desc
;

但是我似乎无法获得与之匹配的AuditQuery。


当我尝试上述createNativeQuery时,我得到:

javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

可能是由于实体上的几个UUID字段(包括position_source_feed_id)

1 个答案:

答案 0 :(得分:0)

我希望以下查询能够正常工作:

AuditReader reader = AuditReaderFactory.get( session );
YourEntity lastRevision = reader.createQuery()
  .forRevisionsOfEntity( YourEntity.class, true, false )
  .add( AuditEntity.property( "position_source_feed_id" ).eq( feedId ) )
  .addOrder( AuditEntity.revisionNumber().desc() )
  .setMaxResults( 1 )
  .getSingleResult();

查询的工作方式是向Envers询问YourEntity的所有修订版,您只对查询返回position_source_feed_id等于index.html的实际实体本身(不包括删除)感兴趣。提供的价值。然后将结果集限制为最高修订版本号,并将其返回。