gpt4 book ai didi

jpa - 使用 JPA 中的 JOINS 重写 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 18:19:06 25 4
gpt4 key购买 nike

我有 MariaDB 的这个 SQL 查询。

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

https://www.db-fiddle.com/f/jKJodfVfvw65aMaVDyFySd/0

如何在 HQL 查询中实现此查询?我想在 JPA 中使用它?

最佳答案

(在下面的评论后大部分重写了答案)

JPA 没有对分层查询的内置支持。主要选项是 native 查询。

例如。使用这个实体类:

@Entity
public class MyTable {
@Id
@GeneratedValue
private int id;

private int uniqueId;

@ManyToOne
private MyTable reference;

// ... getters and setters ...
}

下面是一个原生层级 SQL 查询的例子(实际上是针对 MySQL,以防万一):
    Query query = entityManager.createNativeQuery(
"select @ref\\:=id as id, unique_id, reference_id\r\n" +
"from my_table\r\n" +
"join (select @ref\\:=?)tmp\r\n" +
"where reference_id=@ref",
MyTable.class);
query.setParameter(1, 1);
query.getResultList();

这成功地追踪了一系列引用文献。

(其他选择)

可能没有太多其他选项可以作为单个查询执行此操作。如果可扩展性不太重要,添加反向引用将是一种导航模型的简单方法:
    @OneToMany(mappedBy = "reference")
private Set<MyTable> backReferences;

然后,这些将很容易递归导航。显然,该关系默认为延迟加载,因此在使用之前会增加很少的开销。

关于jpa - 使用 JPA 中的 JOINS 重写 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54439064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com