hibernate 具有选择多列和max()函数的JPA条件子查询

anhgbhbe  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(167)

我需要在Hibernate条件查询中编写以下SQL代码:

SELECT
    a.*
FROM
    objekt a,
                --Filter on max version 
    (
        SELECT
            ueb_uuid,
            MAX(version) AS version
        FROM
            objekt
        GROUP BY
            ueb_uuid
    )              b
                        --concat tables
WHERE
        a.version = b.version
    AND a.ueb_uuid = b.ueb_uuid;

在这种情况下,唯一的显示停止项是选择了2列和max函数的子查询
以下是我尝试的方法

Subquery<Integer> subquery = query.subquery(Integer.class);
Root<ObjektEntity> subqueryRoot =   subquery.from(ObjektEntity.class);
    
subquery.select(builder.max(subqueryRoot.get(ObjektEntity_.version)));
    
subquery.where(builder.equal(root.get(AnotherEntity_.objekt),objekt.get(ObjektEntity_.uuid) )); 
     
query.where(builder.equal(root.get(ObjektEntity_.VERSION),subquery));

如何创建一个具有两列选择和两个不同返回值/列/数据类型的max函数的子查询

r1zk6ea1

r1zk6ea11#

在Hibernate 6.1之前,这是不可能编写的,但是您的特定情况可以重写为这种形式的查询:

SELECT
    a.*
FROM
    objekt a
WHERE a.version = (select max(version) from objekt b where a.ueb_uuid = b.ueb_uuid)

您可以使用JPA标准来制定它。

相关问题