Estoy tratando de recuperar la última revisión de todas las entidades, que no se han eliminado. Hacer esto en SQL es muy simple con una subselección:Listado de la última revisión de cada entidad con envers
select * from article_aud aud1
where rev in
(select max(rev) from article_aud aud2
where aud1.id = aud2.id)
and revtype < 2
Pero no tengo ni idea, la forma de aplicar esto a través de la API envers. Empecé con AuditReader pero no encontró una manera, para seleccionar objetos distintos
public List<Object[]> findLatestArticleRevisions(){
List<Object[]> results = (List<Object[]>) getJpaTemplate().execute(new AuditReaderCallback() {
@Override
public Object doInAuditReader(AuditReader auditReader) {
return auditReader.createQuery().forRevisionsOfEntity(Article.class, false, false)
// TODO select distinct on entities
.addOrder(new PropertyAuditOrder(new RevisionNumberPropertyName(), false))
.getResultList();
}
});
return results;
}
Importante: Quiero hacer esto en una o al menos dos consultas, porque tengo muchos artículos (entidades) con muchas revisiones
¡Muchas gracias!
¿Hay forma de obtener el último número de revisión de una entidad? Digamos que se insertó una entidad, se actualizó dos veces y ahora tiene 3 números de revisión. ¿Cómo puedo obtener el último número de revisión? – AppSensei
Hmm esto parece funcionar cuando tengo múltiples revisiones devueltas en la consulta, la función agregada me da la última (más alta) revisión. Pero si solo hay una revisión, no devuelve ninguna revisión. ¿Has tenido este problema? – chrismacp
En realidad, creo que no entendí cómo estaba funcionando. Si filtra la última revisión de una entidad, esa entidad no se devuelve. Quería la última versión de la entidad después de filtrar las revisiones. Es decir. dame todas las revisiones antes del miércoles y dame la última versión de la entidad de ese subconjunto. No parece funcionar de esa manera. – chrismacp