Sto cercando di recuperare l'ultima revisione di tutte le entità che non sono state eliminate. Fare questo in SQL è molto semplice con una subselect:Elenco dell'ultima revisione di ogni entità 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
Ma non ho la più pallida idea, come implementare questo tramite l'API envers. Ho iniziato con AuditReader ma non ha trovato un modo, per selezionare oggetti distinti
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: io voglio fare questo in uno o almeno due interrogazioni, perché ho avuto molti articoli (entità) con molte revisioni.
Grazie mille!
C'è modo di ottenere l'ultimo numero di revisione di un'entità? Dì come è stata inserita un'entità, aggiornata due volte e ora ha 3 numeri di revisione. Come posso ottenere l'ultimo numero di revisione? – AppSensei
Hmm questo sembra funzionare quando ho più revisioni restituite nella query, la funzione di aggregazione mi dà l'ultima (la più alta) revisione. Ma se c'è una sola revisione, non restituisce alcuna revisione. Hai avuto questo problema? – chrismacp
In realtà penso che abbia frainteso il modo in cui funzionava. Se si esclude l'ultima revisione di un'entità, tale entità non viene restituita. Volevo l'ultima versione dell'entità dopo aver filtrato le revisioni. Cioè dammi tutte le revisioni prima di mercoledì e dammi l'ultima versione dell'entità da quel sottoinsieme. Non sembra funzionare in questo modo. – chrismacp