2016-01-27 5 views
-1

У меня есть структура данных, как enter image description hereКак перечислить данные дерева?

Когда я запрашиваю эту базу данных с помощью

List<TextualReq> textualReqList = session.createQuery("from TextualReq where parent is null").list(); 

Здесь TextualReq Объект

@Id 
     @GeneratedValue(generator = "increment") 
     @GenericGenerator(name = "increment", strategy = "increment") 
     @Column(name="ID") 
     private int     id; 

     @ManyToOne 
     @JoinColumn(name="parent") 
     private TextualReq    parent; 
     @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
     @Column(name="children") 
     private Set<TextualReq> children = new HashSet<TextualReq>(); 
     @Column(name="data") 
     private String     data; 

я получить две записи в "textualReqList". Мне нужно итерации и показать эти данные примерно как enter image description here

+0

Я не думаю, что ваш запрос является правильным. Во-первых, в нем нет ** select **. Во-вторых, он даст только 2 записи, для которых родительский номер null –

+0

правильный, он даст только две записи, которые являются родителями. когда я передаю родительский элемент (NULL) в рекурсивную функцию. Он вернет дочерние элементы. –

+0

@ P.Jairaj Для HQL вам не нужно указывать 'select'. –

ответ

1

Я думаю, что это должно быть сделано!

public void displayData(){ 
    display(null); 
} 
public void display(TextualReq textualReq){ 
    List<TextualReq> textualReqList = null; 

    String parentId = "is null"; 
    if(textualReq!=null){ 
     parentId = "= "+textualReq.Id; 
     System.out.println(textualReq.data); 
     System.out.print(" "); 
    } 
    textualReqList = session.createQuery("select * from TextualReq where parent "+parentId).list(); 
    if(textualReqList==null) 
     return; 
    for(int i=0;i<textualReqList.size();i++){ 
     display(textualReqList.get(i)); 
    } 
} 

Просто вызовите функцию displayData().

+0

Ваш запрос верен только для 'parentId' равно 'null'. И будет лучше использовать параметр запроса: parentId. –

0

Я предлагаю добавить toString() метод к классу TextualReq:

public String toString() { 
    return toStringWithPrefix(""); 
} 

private String toStringWithPrefix(String prefix) { 
    StringBuilder childrenAsString = new StringBuilder(); 
    for (TextualReq child : children) { 
     childrenAsString.append(child.toStringWithPrefix(prefix + '\t')); 
    } 
    return String.format("%s%s%n%s", prefix, data, childrenAsString); 
} 

Затем вы можете перебрать textualReqList и печать каждого элемента:

for (TextualReq req : textualReqList) { 
    System.out.print(req); 
} 
Смежные вопросы