Создать JPA-совместимый запрос - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть эта таблица, в которой я хотел бы хранить цепочку записей.

CREATE TABLE table_name (
    id INT,
    unique_id varchar,
    reference_id varchar,
);

Я хочу реализовать SQL-запрос для MariDB, который печатает все записи по id со всеми записями с reference_id.Примерно так:

| id | unique_id | reference_id |   |   |
|----|-----------|--------------|---|---|
| 43 | 55544     |              |   |   |
| 45 | 45454     | 43           |   |   |
| 66 | 55655     | 45           |   |   |
| 78 | 88877     | 66           |   |   |
| 99 | 454       | 33           |   |   |

Я бы хотел, чтобы при выборе записи 66 были получены все транзакции вверх и вниз, потому что друг друга используют id, который указывает на них.Как я могу реализовать это с помощью рекурсивного CTE?Есть ли лучший способ?

Ожидаемый результат для записи с unique_id 66:

| id | unique_id | reference_id |   |   |
|----|-----------|--------------|---|---|
| 43 | 55544     |              |   |   |
| 45 | 45454     | 43           |   |   |
| 66 | 55655     | 45           |   |   |
| 78 | 88877     | 66           |   |   |

Я пробовал это, но строки выше не печатаются.

select @ref:=id as id, unique_id, reference_id
from mytable
join (select @ref:=id from mytable WHERE id = 66)tmp
where reference_id=@ref

Демонстрация по БД Fiddle

Если это возможно, я хотел бы отредактировать этот запрос в JPA?

1 Ответ

0 голосов
/ 05 февраля 2019

Это невозможно с JPQL, потому что это будет рекурсивный запрос.

Но вы можете использовать SQL и выполнить его как собственный запрос.

entityManager.createNativeQuery("<your sql>");

Подробнее о рекурсивных запросах см. В руководстве MariaDB https://mariadb.com/kb/en/library/recursive-common-table-expressions-overview/

...