Pet*_*zov 5 jpa jpa-2.0 spring-data-jpa
我有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
Run Code Online (Sandbox Code Playgroud)
https://www.db-fiddle.com/f/jKJodfVfvw65aMaVDyFySd/0
如何在HQL查询中实现此查询?我想在JPA中使用它?
(答案大部分在下面的评论后重写)
JPA没有内置的分层查询支持.主要选项是本机查询.
例如,使用此实体类:
@Entity
public class MyTable {
@Id
@GeneratedValue
private int id;
private int uniqueId;
@ManyToOne
private MyTable reference;
// ... getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)
以下是本机分层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();
Run Code Online (Sandbox Code Playgroud)
这成功地追逐了一系列参考文献.
(其他替代方案)
可能没有太多其他选项可以作为单个查询执行此操作.如果可扩展性不是一个问题,添加反向引用将是导航模型的简单方法:
@OneToMany(mappedBy = "reference")
private Set<MyTable> backReferences;
Run Code Online (Sandbox Code Playgroud)
那些将是直接递归导航.显然,关系默认为延迟加载,因此在使用之前会增加很少的开销.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |