Алгоритм вычисления полей, используемых для построения иерархии - George912/bookmark_manager GitHub Wiki
parent_id
0. parent_id категории верхнего уровня равен её id
- получить id родителя категории
- если id != null, получить из контекста по id родителя
- установить родителя категории
level
- если родитель не установлен, то level=0
- если есть родитель, то level=parent.getLevel() + 1
top_id
- если родитель не установлен, то top_id=id текущей категории
- если есть родитель, то top_id=parent.getTop().getId()