java - 使用 envers 列出每个实体的最新版本

标签 java sql hibernate hibernate-envers

我正在尝试检索尚未删除的所有 实体的最新版本。使用子选择在 SQL 中执行此操作非常简单:

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

重要:我想在一个或至少两个查询中执行此操作,因为我有很多文章(实体)有很多修订。

非常感谢!

最佳答案

我们需要使用 https://hibernate.atlassian.net/browse/HHH-7827 的修复程序即 AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext()。

    AuditQuery query = getAuditReader().createQuery().forRevisionsOfEntity(
            entityClass, false, false);
    query.add(AuditEntity.revisionNumber().le(revision));
    query.add(AuditEntity.revisionNumber().maximize()
            .computeAggregationInInstanceContext());
    query.addOrder(AuditEntity.revisionNumber().desc());
    return query.getResultList();

另请参阅:

Find max revision of each entity less than or equal to given revision with envers

Can hibernate envers return the latest revision of all entities of a specific type?

关于java - 使用 envers 列出每个实体的最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11742384/

相关文章:

Java 字母数字解析

mysql - 为什么 SQL 声明失败?

php - 如何在 SQL 查询中使用 session 变量?

java - 什么情况下我们需要在数据库中使用组合键

java - Spring Data JPA 实体的有效标志

Java HW,字符串初始化错误

java - 异常 java.sql.SQLException : Parameter index out of range (1 > number of parameters, 为 0)

java - Android 中的可恢复文件下载/上传

sql - OBJECT_ID 在 SQL Server 中有什么作用?

java - #Hibernate 是否有必要在保存包含它的对象之前保存属于复合键的每个对象?