【问题标题】:Create JPA compatible query创建 JPA 兼容查询
【发布时间】:2019-06-29 03:59:04
【问题描述】:

我有这张表,我想存储一个记录链。

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

我想为 MariDB 实现 SQL 查询,它按 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

Demo on DB Fiddle

如果可能的话,我想将此查询编辑到 JPA 中吗?

【问题讨论】:

    标签: sql jpa mariadb jpa-2.0 jpa-2.1


    【解决方案1】:

    JPQL 无法做到这一点,因为这将是一个递归查询。

    但您可以使用 SQL 并将其作为本机查询执行。

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

    阅读 MariaDB 手册中有关递归查询的更多信息 https://mariadb.com/kb/en/library/recursive-common-table-expressions-overview/

    【讨论】:

    • 谢谢。如何编辑 SQL 查询以获取所有上下行?
    猜你喜欢
    • 2017-11-25
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2016-02-15
    • 1970-01-01
    • 2018-10-12
    • 2018-10-27
    相关资源
    最近更新 更多