Os envios de hibernação podem retornar a revisão mais recente de todas as entidades de um tipo específico?

Eu estou tendo um problema enorme tentando obter Envers para executar a consulta que preciso. Se alguém puder me informar se isso é possível de dentro do Envers ou se eu precisar extirpar o SQL diretamente, isso seria uma ajuda tremenda!

Aqui está o problema. Eu tenho uma entidade de "projeto" inventada - qualquer classe de entidade fará - que é auditada. Eu estou tentando obter a revisão mais recente da entidade EVERY Project por meio de uma consulta AuditReader.

Quando faço isso (as outras partes do código não devem importar):

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

e ligar a saída do SQL, vejo esta consulta sendo gerada:

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

Observe a parte "select max". É quase exatamente o que eu preciso. Apenas a cláusula where está errada Preciso dizer: onde project_a2_.id = project_a0_.id

Eu editei à mão, corri e funcionou perfeitamente. Agora parece que o método "addIdsEqualToQuery" na classe IdMapper me permite fazer o que eu quero. Então, se eu mudar o AuditEntity.id (). Eq ("12345") com isso:

maxExpression.add(new IdentifierIdsEqAuditExpression());

onde IdentifierIdsEqAuditExpression é igual a:

    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());
        }    
    }

deve estar perto - é. Eu recebo:

Caminho inválido: 'originalId.id' [selecione e__, r de com.mycompany.Project_AUD e_, com.mycompany.audit.AuditRevisionEntity r onde id = originalId.id ee_.originalId.REV.id = (selecione max (_e0.originalId.REV.id) de com.mycompany.Project_AUDe0 onde id = originalId.id) ee_.originalId.REV.id = ordem r.id por e__.originalId.REV.id asc]

O problema é que não consigo gerá-lo para gerar o que preciso e, mesmo que o prefixo tenha mudado de "originalid" para o correto, por que os envers começam a colocar isso em todo lugar, e não em um único local?