Это классическая проблема.
Решение во многом зависит от того, что вы хотите сделать со своим деревом.
Нормальным решением является непосредственное представление отношений родитель-потомок.Ваш класс выглядит примерно так:
@Entity
public class Category {
@ManyToOne
private Category parent;
@OneToMany(mappedBy="parent")
private Set<Category> children;
}
И у вас есть один столбец в таблице, который содержит значение parent
.
Этот подход прост для понимания и реализации, и делаетНавигация по дереву очень проста.Тем не менее, довольно дорого ответить на такие вопросы, как «что все категории где-то под« домашней обстановкой »?»или «Является ли« lilos »подкатегорией, на любой глубине,« садовых принадлежностей »?».
Если вы не возражаете против использования некоторого собственного SQL, и ваша база данных поддерживает рекурсивные общие табличные выражения, тогда вывыполнять такие запросы довольно легко.
Если нет, найдите вложенных множеств .