Алгоритм вычисления полей, используемых для построения иерархии - George912/bookmark_manager GitHub Wiki

parent_id

0. parent_id категории верхнего уровня равен её id

  1. получить id родителя категории
  2. если id != null, получить из контекста по id родителя
  3. установить родителя категории

level

  1. если родитель не установлен, то level=0
  2. если есть родитель, то level=parent.getLevel() + 1

top_id

  1. если родитель не установлен, то top_id=id текущей категории
  2. если есть родитель, то top_id=parent.getTop().getId()