【问题标题】:Hibernate-Envers Audit Query: Select latest entity revision where field was equal to value across all entitiesHibernate-Envers 审计查询:选择最新的实体版本,其中字段等于所有实体的值
【发布时间】:2019-12-13 09:42:36
【问题描述】:

我正在尝试选择我的每个 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

【问题讨论】:

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


    【解决方案1】:

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

    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 等于提供的值。然后结果集被限制为最高修订号并被返回。

    【讨论】:

    • 这不是我所追求的......我正在寻找具有该 feedId 的每个实体的最新版本
    猜你喜欢
    • 2015-12-14
    • 2011-07-10
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多