HQL 递归,我该怎么做?
我有一个树结构,每个都有一个父级和一个.每个节点都有一个 ,我想在我选择的地方做一个查询,作为这个节点和所有父节点的标题。如何编写此查询?Node
Set<Node> children
String title
Set<String> titles
对单个标题的查询是这样的,但就像我说的,我希望它扩展到整个父分支。
SELECT node.title FROM Node node WHERE node.id = :id
干杯
尼克
我有一个树结构,每个都有一个父级和一个.每个节点都有一个 ,我想在我选择的地方做一个查询,作为这个节点和所有父节点的标题。如何编写此查询?Node
Set<Node> children
String title
Set<String> titles
对单个标题的查询是这样的,但就像我说的,我希望它扩展到整个父分支。
SELECT node.title FROM Node node WHERE node.id = :id
干杯
尼克
不能使用 HQL 执行递归查询。请参阅此内容。正如那里所说,它甚至不是标准的SQL。您有两种选择:
进行多个查询。例如:
// obtain the first node using your query
while (currentNode.parent != null) {
Query q = //create the query
q.setParameter("id", currentNode.getParentId());
Node currentNode = (Node) q.getSingleResult();
nodes.add(currentNode); // this is the Set
}
我肯定会选择第二个选项。
虽然无法编写您请求的递归查询,但可以使用 HQL 预先获取层次结构;这样做至少可以让你在内存中行走树,而不会触及每个级别的数据库。
select n from Node n
left join fetch n.Children