Hibernate Envers: AuditQuery для выбора сущности, действительной в данный момент времени - PullRequest
1 голос
/ 05 марта 2019

Я использую Hibernate Envers с ValidityAuditStrategy. Я хочу выбрать версию сущности, существовавшей в данный момент времени.

Моя информация о редакции выглядит так в 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? Я запутался в параметре otherAlias ​​для AuditProperty::leProperty(otherAlias, otherPropertyName).

Пока я получил это:

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

1 Ответ

1 голос
/ 05 марта 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...