Я хочу смоделировать иерархические данные в 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
.
Будет полезна любая помощь в моделировании этой структуры.