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

Мой желаемый запрос - получить список объектов 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?

7
задан Pascal Thivent 19 August 2010 в 22:39
поделиться

2 ответа

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%'
3
ответ дан 7 December 2019 в 07:38
поделиться

Если вы хотите использовать родной 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
4
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: