Может ли hibernate envers возвращать последнюю версию всех сущностей определенного типа?

У меня огромная проблема с попыткой заставить Envers выполнить запрос, который мне нужен. Если кто-нибудь может сообщить мне, возможно ли это изнутри Envers или мне нужно напрямую извиниться за SQL, это было бы огромной помощью!

Здесь проблема. У меня есть макияжПроект» сущность - любой класс сущности будет делать - это проверяется. Я пытаюсь получить последнюю версию сущности КАЖДОГО проекта с помощью запроса AuditReader.

Когда я делаю это (другие части кода не должныне имеет значения):

AggregatedAuditExpression maxExpression = AuditEntity.revisionNumber().maximize();
maxExpression.add(AuditEntity.id().eq("12345"));
query.add(maxExpression);

и включить вывод SQL, я вижу этот запрос генерируется:

Hibernate: select project_a0_.id as id6_0_, project_a0_.REV as REV6_0_, auditrevis1_.id as id0_1_,
project_a0_.REVTYPE as REVTYPE6_0_, project_a0_.description as descript4_6_0_, 
auditrevis1_.timestamp     as timestamp0_1_, auditrevis1_.username as username0_1_ 
from MYSCHEMA.project_AUD project_a0_ cross join MYSCHEMA.REVINFO auditrevis1_ 
where project_a0_.REV=

(select max(project_a2_.REV) from MYSCHEMA.project_AUD project_a2_ 
               where project_a2_.id=?) 

and project_a0_.REV=auditrevis1_.id order by project_a0_.REV asc

Обратите внимание "выбрать макс часть. Это почти то, что мне нужно. Просто предложение where неверно, мне нужно сказать: где project_a2_.id = project_a0_.id

Я отредактировал его вручную, запустил, и он отлично работает. Теперь это выглядит как "addIdsEqualToQuery» метод в классе IdMapper позволяет мне делать то, что я хочу. Так что, если я изменю AuditEntity.id (). Eq ("12345") с этим:

maxExpression.add(new IdentifierIdsEqAuditExpression());

где IdentifierIdsEqAuditExpression равно:

    class IdentifierIdsEqAuditExpression implements AuditCriterion {    
        @Override
        public void addToQuery(AuditConfiguration auditCfg, String entityName, QueryBuilder qb, Parameters parameters) {
            auditCfg.getEntCfg().get(entityName).getIdMapper()
                    .addIdsEqualToQuery(parameters, null, auditCfg.getAuditEntCfg().getOriginalIdPropName());
        }    
    }

это должно быть близко - это так. Я получил:

Неверный путь: 'originalId.id» [выберите e__, r из com.mycompany.Project_AUD e_, com.mycompany.audit.AuditRevisionEntity r, где id = originalId.id и e_.originalId.REV.id = (выберите максимум (_e0.originalId.REV.id) из com.mycompany.Project_AUDe0 где id = originalId.id) и e_.originalId.REV.id = r.id заказ по e__.originalId.REV.id asc]

Проблема в том, что я могучтобы получить то, что мне нужно, и даже если префикс был изменен с "originalId» к правильному, почему Энверс начинает размещать это повсюду, а не в одном месте?

Ответы на вопрос(1)

Ваш ответ на вопрос