当前位置: 首页 > 面试题库 >

查找每个实体的最大修订小于或等于给定修订

糜昌胤
2023-03-14
问题内容

这可能很简单,但是找不到方法。我试图找到每个实体的最大修订小于或等于给定的修订号。

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

上面的代码按降序返回同一实体的多个修订。我想获得每个实体的最新不同修订版本,该修订版本应小于或等于给定的修订版本号。

作为一种解决方法,我正在过滤resultSet,如下所示。我希望可以在AuditQuery本身上进行此过滤。

    AuditQuery query = getAuditReader().createQuery().forRevisionsOfEntity(
            entityClass, false, false);
    query.add(AuditEntity.revisionNumber().le(revision));       
    query.addOrder(AuditEntity.revisionNumber().desc());
    List<?> list = query.getResultList();

    StringBuilder builder = new StringBuilder();
    EntityClass entity = null;
    Set<Long> entitySet = new HashSet<>();
    if (!list.isEmpty()) {
        for (int i = 0; i < list.size(); i++) {
            Object[] result = (Object[]) list.get(i);
            entity = (EntityClass) result[0];
            AuditRevision auditRevision = (AuditRevision) result[1];
            RevisionType operationType = (RevisionType) result[2];

            if (!entitySet.contains(entity.getId())) {
                //consider most recent revision of entity
                entitySet.add(entity.getId());
                builder.append(i + "-->");
                builder.append("id:" + entity.getId());
                builder.append(", auditRevision:" + auditRevision);
                builder.append(", operationType:" + operationType);
            }
        }
    }
    builder.append(", count:" + entitySet.size());

解:

我们需要使用
[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();

问题答案:

我认为您正在寻找AuditEntitry.revisionNumber.max()约束。这应该使满足嵌套约束的修订版本号最大化。

另请参阅有关此问题的文档。



 类似资料:
  • 问题内容: 给出以下表1: 和Table2包含一些RefID和intVals,例如 需要SQL语句来获取每个RefID和NULL的下一个更大的intValue(如果在表1中找不到),则以下是预期结果 帮助将不胜感激! 问题答案: 派生表从给定的表1和表2检索最小值。外部查询仅检索someValue。 这是带有现场测试的Sql Fiddle。

  • 本文向大家介绍查找三个小于或等于N的整数,以使它们的LCM最大-C ++,包括了查找三个小于或等于N的整数,以使它们的LCM最大-C ++的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个基于LCM概念的程序。如标题所示,我们必须找到三个小于或等于LCM最大的给定数字的数字。 让我们来看一个例子。 在深入探讨问题之前,让我们看看什么是LCM并为其编写程序。 LCM是数字的最小公倍

  • 给定一个向量和一个有序向量,我想要一个向量,其中 ] 等于 中最小元素的索引,以便

  • 给定一个有N个整数的数组A,我们需要找到子数组的最高和,使得每个元素小于或等于给定的整数X 示例:设 N=8 且数组为 [3 2 2 3 1 1 1 3] 。现在,如果 x=2,那么如果我们考虑 1 个基本索引,则通过求和 A[2] A[3] 来回答 4。如何在 O(N) 或 O(N*logN) 中执行此问题 目前,我通过检查每个可能的子阵列来采用O(N^2)方法。如何降低复杂性?

  • 给定一个2D数组和一个数字。 问题:我们有一个矩阵,矩阵的每个单元格表示遍历该单元格的成本。我们从左上角开始,我们必须到达最后一个单元格(右下角)。我必须编写一个函数,返回到达而不超过的最大代价路径的代价。 如果找不到最大和小于或等于的路径,则返回,矩阵的值不能为负 解决方案:我尝试了很多代码,但没有一个返回我期望的结果。 我的第一个解决方案是在一个简单的数组中转换2D数组,并应用背包算法,但它不

  • 所以,我有一个所有正自然数的数组。给我一个阈值。我必须找出总和小于给定阈值的数字(连续的)的最大计数。 输入数组的最大大小可以为 10^5。 基本上,我想到了一种算法,它计算原始数组的子集中元素的数量,这些元素的总和将小于给定的阈值。但是,这将导致O(N^2).的复杂性有人能建议一个更好的算法吗?我不是在寻找一个代码,只有一个算法/伪代码将做得很好。谢谢!