Hibernate递归查询

时间:2010-08-19 19:23:27

标签: java hibernate orm recursion hql

我想要的查询是获取属于类别的课程对象列表。我的目标如下:

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相关的所有课程?

2 个答案:

答案 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%'