Java Hibernate递归查询

Java Hibernate递归查询,java,hibernate,orm,recursion,hql,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相关的课程 因为您不知道树有多深,所以可以使用以下某种模式 select distin

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

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

public class Category{
     String name;
     Category parent;
}

如何查询A类课程,并返回所有与A.A、A.A.A和A.A.B相关的课程

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

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

如果您愿意使用本机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
你好我正在构建一个POC作为面试测试,我正在尝试使用递归查询,就像这个例子一样。该数据库是一个H2数据库,因为它只是一个POC。H2确实支持递归查询,我使用H2控制台对其进行了测试。但在创建本机查询时,它不会返回任何记录。项目是Spring引导+Spring数据,测试H2实例在内存中。非常感谢您的任何意见。谢谢 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