Hibernate рекурсивный запрос - PullRequest
       23

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

7 голосов
/ 19 августа 2010

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

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?

Ответы [ 2 ]

4 голосов
/ 20 августа 2010

Если вы хотите использовать собственный 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
3 голосов
/ 20 августа 2010

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

select distinct 
    c
from
    Course c
left join fetch 
    c.categories c
where
    c.name like 'A.A%'
...