Рекурсивный запрос Hibernate

мой желаемый запрос-получить список объектов курса, которые принадлежат к категории. Мои цели таковы:--3-->

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

Как я могу запроса для курсов в номинации "А.", и вернуть все курсы, связанные с А. А., А. А. А. и А. А. Б?

2 ответов


потому что вы не знаете, насколько глубоко дерево, вы можете использовать какой-то шаблон следующим образом

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