需要帮助将 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 (..)
形式中使用相同的想法。
到目前为止,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 (..)
形式中使用相同的想法。