Рекурсия HQL, как я делаю это?

У меня есть древовидная структура где каждый Node имеет родителя и a Set<Node> children. Каждый Узел имеет a String title, и я хочу сделать запрос, где я выбираю Set<String> titles, быть заголовком этого узла и всех родительских узлов. Как я пишу этот запрос?

Запрос для единственного заголовка - это, но как я сказал, я хотел бы расширенный за все ответвление родителей.

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

Удачи

Nik

15
задан Bozho 19 November 2010 в 00:02
поделиться

1 ответ

Вы не можете выполнять рекурсивные запросы с HQL. См. Это . И, как там сказано, это даже не стандартный SQL. У вас есть два варианта:

  • написать рекурсивный собственный SQL-запрос, зависящий от поставщика,
  • сделать несколько запросов. Например:

     // получить первый узел с помощью вашего запроса 
    while (currentNode.parent! = Null) {
    Query q = // создать запрос 
    q. setParameter ("идентификатор", currentNode.getParentId ()); 
    Узел currentNode = (Узел) q.getSingleResult (); 
    nodes.add (currentNode); // это набор 
    } 
     

Я бы определенно выбрал второй вариант.

14
ответ дан 1 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: