Hibernate递归查询

Kev*_*vMo 7 java recursion orm hibernate hql

我想要的查询是获取属于类别的Course对象列表.我的对象如下:

public class Course{
     String name;
     List<Category> categories;
}

public class Category{
     String name;
     Category parent;
}
Run Code Online (Sandbox Code Playgroud)

由于类别相互引用,因此它们可以具有无限深度:

A
  A.A
     A.A.A
     A.A.B
  A.B
     A.B.A
B
 B.A
 B.B
C
Run Code Online (Sandbox Code Playgroud)

如何查询"AA"类别中的课程,并返回与AA,AAA和AAB相关的所有课程?

a_h*_*ame 6

如果您愿意使用本机 SQL 并且您的数据库支持递归公用表表达式(基本上除 MySQL 之外的所有主要 DBMS),这很容易:

WITH RECURSIVE course_tree (name) AS (
   选择名称
   从课程
   WHERE 名称 = 'AA'
   联合所有
   选择名称
   从课程
   WHERE parent_id = course_tree.id
)
选择 *
FROM course_tree


Art*_*ald 3

因为您不知道树有多深,所以可以使用某种模式,如下所示

select distinct 
    c
from
    Course c
left join fetch 
    c.categories c
where
    c.name like 'A.A%'
Run Code Online (Sandbox Code Playgroud)