У меня есть древовидная структура где каждый Node
имеет родителя и a Set<Node> children
. Каждый Узел имеет a String title
, и я хочу сделать запрос, где я выбираю Set<String> titles
, быть заголовком этого узла и всех родительских узлов. Как я пишу этот запрос?
Запрос для единственного заголовка - это, но как я сказал, я хотел бы расширенный за все ответвление родителей.
SELECT node.title FROM Node node WHERE node.id = :id
Удачи
Nik
Вы не можете выполнять рекурсивные запросы с HQL. См. Это . И, как там сказано, это даже не стандартный SQL. У вас есть два варианта:
сделать несколько запросов. Например:
// получить первый узел с помощью вашего запроса
while (currentNode.parent! = Null) {
Query q = // создать запрос
q. setParameter ("идентификатор", currentNode.getParentId ());
Узел currentNode = (Узел) q.getSingleResult ();
nodes.add (currentNode); // это набор
}
Я бы определенно выбрал второй вариант.