Как запросить в Hibernate Envers данные диаграммы - PullRequest
0 голосов
/ 12 июня 2018

Я использую Hibernate Envers и PostgreSQL для отслеживания истории сущностей, и я хотел бы воспользоваться этим для отображения данных в аналитических целях.Например, я хотел бы установить число объектов в течение определенного периода, и я смог создать запрос для получения этого из таблиц Envers, то есть

with recursive times(t) as (
    values 
        (1524700800000) 
    union all 
    select 
        t + (3600 * 1000) 
    from 
        times 
    where 
        t < 1527811200000
), 
revisions(t, n) as (
    select 
        times.t, 
        max(r.id) 
    from 
        times 
        left outer join REV r on r.timestamp <= times.t 
    group by 
        times.t 
    order by 
        times.t
) 
select 
    r.t, 
    count(r.n) 
from 
    revisions r 
    left outer join Order_AUD o on o.rev <= r.n 
    and o.revtype <> 2 
    and (
        o.revend > r.n 
        or o.revend is null
    ) 
group by 
    r.t 
order by 
    r.t

, и я получил этот набор результатов

-----------------------+---
2018-04-26 00:00:00+00 | 0
2018-04-27 00:00:00+00 | 2
2018-04-28 00:00:00+00 | 5
2018-04-29 00:00:00+00 | 8
2018-04-30 00:00:00+00 | 8
2018-05-01 00:00:00+00 | 9
2018-05-02 00:00:00+00 | 9

, что правильно, так как показывает растущее число заказов каждый день.

Примечание. Я использую ValidityAuditStrategy, чтобы столбец revend был доступен.

Затем, если я хочу отфильтровать агрегацию, например, подсчет только заказов в определенном статусе, я могу добавить предикат к предложению соединения:

select 
    r.t, 
    count(r.n) 
from 
    revisions r 
    left outer join Order_AUD o on o.rev <= r.n 
    and o.revtype <> 2 
    and (
        o.revend > r.n 
        or o.revend is null
    )
    and o.status = 'pending'

Здесь я использую таблицы CTE и таблицы времени выполнения, которые яя не могу использовать с API Envers, поэтому мой вопрос:

Как мне достичь эквивалентного результата с API Envers (если это вообще возможно)?

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