Как пронумеровать объект сущности дерева, который расширяет номер родителя?

#java #hibernate #jpa #recursion

Вопрос:

У меня есть объект Item

 @Entity
public class Item {

  @Id
  private Long id;

  @ManyToOne
  private Item parentItem;

  private String name;

  private String number;

  // getters amp; setters

}
 

Мне нужна функция, которая генерирует числа со следующими правилами:

  • корневые элементы получают одно число, например 1. 2.
  • дочерний элемент расширяет свой родительский номер и получает число, подобное 1.1. 1.2
  • другие элементы-потомки также расширяют свой родительский номер, например 1.1.1. 1.1.2
  • нет никаких ограничений на уровни потомков.

Ответ №1:

просто пройдите (от листа к корню) по дереву и соедините числа:

 @Entity
public class Item {

  @Id
  private Long id;

  @ManyToOne
  private Item parentItem;

  private String name;

  private String number;

  String getHierarchy(){
    return this.parentItem != null ? 
             this.parentItem.getHierarchy()   " . "   this.number :
             this.number
  }

}