需要帮助将SQL查询转换为JPQL

时间:2020-04-15 17:18:52

标签: mysql sql jpql

到目前为止,Spring的JPA存储库对我来说已经足够了,但是现在我需要一个自定义查询。我已经为此努力了一天,试图学习更多有关SQL,联接等的知识,并提出了一个本机MySQL查询,该查询(我认为)可以实现我想要的功能:我想找到每个“产品”的所有最新信息,并带有一个唯一网址。示例:

PRODUCT
id | url                       | created_date
---------------------------------------------
 1 | http://foo.bar/products/a | 2020-04-01
 2 | http://foo.bar/products/a | 2020-04-02
 3 | http://foo.bar/products/b | 2020-04-02
 4 | http://foo.bar/products/a | 2020-04-03
 5 | http://foo.bar/products/b | 2020-04-03

RESULT
id | url                       | created_date
---------------------------------------------
 4 | http://foo.bar/products/a | 2020-04-03
 5 | http://foo.bar/products/b | 2020-04-03

这是我想出的原生MySQL查询:

SELECT *
FROM product t
INNER JOIN
    (SELECT url, MAX(created_date) AS Latest
    FROM product
    GROUP BY url) grouped_url 
ON t.url = grouped_url.url 
AND t.created_date = grouped_url.Latest

我尝试将其转换为JPQL以便使用@Query注释似乎很尴尬,因此我什至不用在这里张贴它们:D有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

将您的SQL查询转换为以下形式:

SELECT *
FROM product p1
WHERE NOT EXISTS ( SELECT 1
                   FROM product p2
                   WHERE p1.url = p2.url
                     AND p1.created_date < p2.created_date )

它与JPQL兼容-请参见Subqueries - EXISTS Expressions

或者您可以以>= ALL (..)的形式使用相同的想法。