【问题标题】:JPQL Selecting Record with Max ValueJPQL 选择具有最大值的记录
【发布时间】:2012-05-18 11:45:10
【问题描述】:

我正在尝试为特定列选择具有最大值的记录,这是我目前所拥有的:

select o from Order o 
    where o.orderNumber = :orderNumber
    and o.version =
        (select max(o.version) from Order o where o.orderNumber = :orderNumber)

这似乎正在生成 SQL:

SELECT *
FROM   Order
WHERE  ordernumber = :orderNumber
       AND orderversion = (SELECT Max(orderversion)
                           FROM   order
                           WHERE  ordernumber = :orderNumber);

我认为下面的 SQL 会更高效:

SELECT *
FROM   order ord
       INNER JOIN (SELECT ordernumber,
                          Max (version) AS version
                   FROM   order
                   WHERE  ordernumber = :ordernumber
                   GROUP  BY ordernumber) mx
         ON ord.ordernumber = mx.ordernumber
            AND ord.version = mx.version; 

无论如何我可以用 JPQL 来表达这个吗?

(大多数关于在特定字段上选择具有最大值的记录的问题的在线答案似乎暗示了我提出的上述 JPQL...)

【问题讨论】:

  • 您使用的是哪个数据库引擎?
  • 我使用 Oracle 和 Hibernate 作为我的 JPA 提供程序。

标签: hibernate jpa hql jpql


【解决方案1】:

不,不可能使用 HQL 生成上述 SQL 查询。 The documentation 说:

请注意,HQL 子查询只能出现在 select 或 where 条款。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    相关资源
    最近更新 更多