我有一张这样的桌子:

bookName            updateId
----------------------------
LordOfTheRings      12
WheelOfTime         3
Cradle              9
WheelOfTime         14
Cradle              10
Cradle              11

如何构建一个CriteriaQuery来获得给定图书的最大updateId? 我需要这样的东西:

bookCriteriaQuery.select(bookRoot);
bookCriteriaQuery.and(
    bookCriteriaBuilder.equal(bookRoot.get("bookName"), "Cradle"),
    bookCriteriaBuilder.max(bookRoot.get("updateId")) // <---  except this doesn't work
);
Book newest = entityManager.createQuery(bookCriteriaQuery).getSingleResult();

推荐答案

您的查询可以稍微修改以执行如下所需的结果:

    Predicate pred = cb.equal(cb.equal(bookRoot.get("bookName"), "Cradle"));
    Order order = cb.desc(bookRoot.get("updateId"));
    query.select(bookRoot).where(pred).orderBy(order);
    entityManager.createQuery(query).setMaxResults(1)
        .getResultList().stream()
        .findFirst();

请注意,如果查询发现超过1个结果,则.getSingleResult()将引发异常.

Java相关问答推荐

当列顺序更改时,Table View列列表的Change. wasPermanted()总是返回假

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

RichFaces 3.x-Spring Boot-迁移web.xml

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

无法使用ApacheSpark依赖项构建JavaFX应用程序

PDFBox未加载内容

与不同顺序的组进行匹配,不重复组但分开

Java17支持哪个MapR版本?

为什么Collectors.toList()不能保证易变性

try 使用类来包含JSON响应

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

如何通过Java java.lang.Foreign API访问本机字节数组

无法在IntStream上应用Collectors.groupingBy

JavaFX:为什么我的ComboBox添加了一个不必要的单元格的一部分?

如何通过用户ID向用户发送私信

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

Cucumber java-maven-示例表-未定义一步

Java返回生成器的实现