我想要的查询是获取属于类别的课程对象列表。我的目标如下:
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相关的所有课程?
答案 0 :(得分:4)
如果您愿意使用本机SQL,并且您的数据库支持递归公用表表达式(基本上除了MySQL之外的所有主要DBMS),它都非常简单:
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
答案 1 :(得分:3)
因为您不知道树的深度,您可以使用某种模式,如下所示
select distinct
c
from
Course c
left join fetch
c.categories c
where
c.name like 'A.A%'