Próbuję pobrać najnowszą wersję wszystkich encji, które nie zostały usunięte. Robi to w SQL jest bardzo prosta z podselekcji:Wyświetlanie najnowszej wersji każdej encji z envers
select * from article_aud aud1
where rev in
(select max(rev) from article_aud aud2
where aud1.id = aud2.id)
and revtype < 2
Ale nie mam pojęcia, jak zaimplementować to za pośrednictwem interfejsu API envers. Zacząłem AuditReader ale nie znaleźliśmy sposobu, aby wybrać różne obiekty
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;
}
Ważne: Chcę to zrobić w jednym lub co najmniej dwóch zapytań, ponieważ mam wiele artykułów (podmioty) z wieloma rewizje.
Wielkie dzięki!
Czy istnieje sposób uzyskania najnowszej wersji jednostki? Powiedzmy, że encja została wstawiona, zaktualizowana dwukrotnie i teraz ma 3 numery wersji. Jak mogę uzyskać ostatni numer wersji? – AppSensei
Hmm to wydaje się działać, gdy mam wiele wersji zwróconych w zapytaniu, funkcja agregująca daje mi najnowszą (najwyższą) wersję. Ale jeśli jest tylko jedna wersja, to w ogóle nie zwraca żadnej poprawki. Czy masz ten problem? – chrismacp
Myślę, że źle zrozumiałem, jak to działa. Jeśli odfiltrować ostatnią rewizję jednostki, ta jednostka nie zostanie zwrócona. Chciałem najnowszą wersję encji po odfiltrowaniu wersji. To znaczy. daj mi wszystkie poprawki przed środą i daj mi najnowszą wersję podmiotu z tego podzbioru. Wygląda na to, że nie działa w ten sposób. – chrismacp