Hibernate Envers:用于选择在给定时间点有效的实体的 AuditQuery

Hibernate Envers: AuditQuery for selecting entity valid at given point in time

我将 Hibernate Envers 与 ValidityAuditStrategy 结合使用。我想要 select 某个实体在给定时间点存在的版本。

我的修订信息在 SQL 中看起来像这样:

create table revinfo (
    rev int,
    revtstmp datetime2,
    primary key(rev)
);

我的审计实体如下所示:

create table products_aud (
    id long,
    name varchar(255),
    rev int,           -- this is a foreign key into revinfo
    revend int,        -- this is a foreign key into revinfo
    revtype smallint,
    primary key(id, rev)
);

例如,用户想要查看给定实体的版本,有效期为 2019-03-05 16:00:00。

SQL 必须如下所示:

select * from (
select id, name, revtype, x.rev, revend, revtstmp
    from products_aud x join revinfo y
    on x.rev = y.rev
    where id = 14 and y.revtstmp <= '2019-03-05 16:00:00'
) as a
join (
select id, name, revtype, x.rev, revend, revtstmp
    from products_aud x left outer join revinfo y
    on x.revend = y.rev
    where id = 14 and (y.revtstmp >= '2019-03-05 16:00:00' or x.revend is null)
) as b
on a.rev = b.rev;

AuditQuery 必须是什么样子?我对 AuditProperty::leProperty(otherAlias, otherPropertyName) 的 otherAlias 参数感到困惑。

到目前为止我得到了这个:

AuditQuery auditQuery = queryCreator.forRevisionsOfEntity(Product.class, true, true);
auditQuery.add(AuditEntity.revisionProperty("revtstmp").leProperty(???, ???))

https://docs.jboss.org/hibernate/orm/5.1/javadocs/org/hibernate/envers/AuditReader.html#getRevisionNumberForDate-java.util.Date-

AuditReader.getRevisionNumberForDate(java.util.Date date)