我試圖檢索所有實體的最新版本,這些實體尚未刪除。在SQL這樣做是非常簡單的與子查詢:使用envers列出每個實體的最新版本
select * from article_aud aud1
where rev in
(select max(rev) from article_aud aud2
where aud1.id = aud2.id)
and revtype < 2
但我沒有線索,如何通過envers API實現這一點。我開始與AuditReader但沒有找到一種方法,來選擇不同的對象
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;
}
重要:我想這樣做在一個或至少兩個查詢,因爲我有很多文章(實體)與許多修訂。
非常感謝!
有沒有辦法獲得一個實體的最新版本號?說像插入一個實體,更新兩次,現在它有3個修訂號。我怎樣才能得到最新的修訂號碼? – AppSensei 2015-06-16 16:31:18
嗯,這似乎工作時,我在查詢中返回多個修訂,聚合函數給了我最新(最高)的修訂。但是,如果只有一個版本,它根本不會返回任何版本。你有這個問題嗎? – chrismacp 2017-09-27 13:06:44
其實我覺得誤解了它是如何工作的。如果過濾掉實體的最新版本,則不會返回該實體。我在過濾修訂版本後想要最新版本的實體。即星期三之前給我所有的修改,並給我最新版本的實體。似乎沒有這樣工作。 – chrismacp 2017-09-27 16:10:31