Древовидная (иерархическая) структура в Hibernate и GAE - PullRequest
4 голосов
/ 26 января 2011

Я хочу смоделировать иерархические данные в Hibernate (а также в GAE).

Структура сущности аналогична приведенной ниже:

class Node<T>
{
    Long id;
    T nodeValue;
    Node<T> parent;
    List<Node<T>> children;
}

Я согласен с использованием аннотаций JPA, если это необходимо (что, я думаю, будет).

Должны поддерживаться следующие функции:

  • Добавление нового корня (в базе данных может быть несколько деревьев - с помощью parent = null) . Может обойтись без этого, если это может привести к тому, что проектирование не начнется (с использованием некоторого «невидимого корневого узла прадедушки»)
  • Добавление нового узла любому родителю
  • Удаление узла и всей его структуры поддерева
  • Обновление узла (скажем, смена родителя / детей и т. Д.)
  • Возможность путешествовать как сверху вниз, так и снизу вверх по дереву
  • И самое главное ... Учитывая id, способность извлекать определенный узел и затем перемещаться вверх (путь предка) / вниз (путь ребенка)
<Ч />

Подробнее (Обновления)

Вот чего я логически хочу достичь:

  • Имейте плоский список категорий в таблице. Эти категории не имеют отношения друг к другу
  • Иметь таблицу, которая создаст несколько «наборов иерархий» для этих категорий.

Зачем они мне нужны?

Я создаю приложение, в котором документы можно подавать в эти категории.

Однако каждый пользователь может иметь разные точки зрения на одни и те же категории. Например, я могу захотеть создать иерархию Company -> Departments -> HR -> World -> Asia -> India, тогда как кто-то другой захочет увидеть Company -> World -> Asia -> India -> Departments -> HR.

Будет полезна любая помощь в моделировании этой структуры.

1 Ответ

0 голосов
/ 26 января 2011

Вероятно, вам нужно что-то вроде этого (из набора тестов Hibernate):

https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/test/java/org/hibernate/test/annotations/manytoone/Node.java

Но без какого-либо конкретного вопроса трудно ответить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...