Мой желаемый запрос - получить список объектов Course, принадлежащих к категории. Мои объекты следующие:
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
Как я могу запросить курсы в категории «AA» и вернуть все курсы, связанные с AA, AAA и AAB?
Because you do not know how deep is the tree, you can use some kind of pattern as follows
select distinct
c
from
Course c
left join fetch
c.categories c
where
c.name like 'A.A%'
Если вы хотите использовать родной SQL и ваша база данных поддерживает рекурсивные общие табличные выражения (в основном все основные СУБД, кроме 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