HQL 递归,我该怎么做? [英] HQL recursion, how do I do this?

查看:47
本文介绍了HQL 递归,我该怎么做?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个树结构,其中每个 Node 都有一个父节点和一个 Set;孩子.每个节点都有一个 String title,我想在选择 Set 的地方进行查询.titles,是这个节点和所有父节点的标题.我该如何编写此查询?

I have a tree structure where each Node has a parent and a Set<Node> children. Each Node has a String title, and I want to make a query where I select Set<String> titles, being the title of this node and of all parent nodes. How do I write this query?

对单个标题的查询是这样的,但就像我说的,我希望它扩展到整个父母分支.

The query for a single title is this, but like I said, I'd like it expanded for the entire branch of parents.

SELECT node.title FROM Node node WHERE node.id = :id

干杯

尼克

推荐答案

你不能用 HQL 进行递归查询.看到这个.正如那里所说,它甚至不是标准的 SQL.您有两个选择:

You can't do recursive queries with HQL. See this. And as stated there it is not even standard SQL. You have two options:

  • 编写特定于供应商的递归原生 SQL 查询
  • 进行多次查询.例如:

  • write a vendor-specific recursive native SQL query
  • make multiple queries. For example:

// 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
}

我肯定会选择第二个选项.

I'd definitely go for the 2nd option.

这篇关于HQL 递归,我该怎么做?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆