Hibernate 递归查询

9

我希望查询属于某个类别的课程对象列表。我的对象如下:

public class Course{
     String name;
     List<Category> categories;
}

public class Category{
     String name;
     Category parent;
}

由于类别相互引用,它们可以具有无限深度:

A
  A.A
     A.A.A
     A.A.B
  A.B
     A.B.A
B
 B.A
 B.B
C

我该如何查询“A.A”类别内的课程,并返回所有与A.A、A.A.A和A.A.B相关联的课程?

2个回答

7

如果你愿意使用本地SQL并且你的数据库支持递归公共表达式(基本上所有主要的DBMS都支持,除了MySQL),那么这很容易实现:

WITH RECURSIVE course_tree (name) AS (
   SELECT name
   FROM course
   WHERE name = 'A.A'
   UNION ALL
   SELECT name
   FROM course
   WHERE parent_id = course_tree.id
)
SELECT *
FROM course_tree

嗨。我正在构建一个面试测试的 POC,并尝试像这个例子一样使用递归查询。数据库是 H2 数据库(因为这只是一个 POC)。H2 支持递归查询,我使用 H2 控制台进行了测试。但是当创建本地查询时,它返回零条记录。该项目是 Spring Boot + Spring Data,测试 H2 实例在内存中。非常感谢任何意见。谢谢。 - Paulo Pedroso

3
因为您不知道树有多深,您可以使用以下某种模式进行操作。
select distinct 
    c
from
    Course c
left join fetch 
    c.categories c
where
    c.name like 'A.A%'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接