Нужна помощь Преобразование SQL запроса в JPQL - PullRequest
0 голосов
/ 15 апреля 2020

Пока мне хватило JPA-репозиториев Spring, но теперь мне нужен специальный запрос. Я боролся с этим в течение дня, пытаясь узнать больше о SQL, joins, et c и придумал собственный запрос MySQL, который (я думаю) делает то, что я хочу: я хочу найти все последние каждого "продукта" с уникальным 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 Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 15 апреля 2020

Преобразуйте запрос 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 - см. Подзапросы - выражения EXISTS .

Или вы можете использовать та же идея в >= ALL (..) форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...