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

Need Help Converting a SQL Query to JPQL

到目前为止,Spring 的 JPA 存储库对我来说已经足够了,但现在我需要一个自定义查询。我为此苦苦挣扎了一天,试图了解有关 SQL、联接等的更多信息,并想出了一个本机 MySQL 查询,它(我认为)做我想做的事:我想找到所有每个 "product" 中的最新一个具有唯一性 url。示例:

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 有人可以帮助我吗?

将您的 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 (..) 形式中使用相同的想法。