2012-05-30 81 views
0

我正在使用Spring-hibernate框架和Oracle數據庫。現在有一個名爲project的表。每個記錄都有唯一的ID,名稱和parent_id列。說表已經得到了以下這些記錄...Java中的動態樹創建

ID NAME PARENT_ID 
1 A  NULL 
2 B  1 
3 C  NULL 
4 D  3 
5 E  3 

現在我已創建一個樹視圖,其中這些記錄將顯示在根據自己的親子關係。這樣的..

1---P 
    ch---2 
3---P 
    ch--4 
    ch--5 

現在,任何人都可以幫助我如何創建樹從動態數據庫動態抓取記錄。什麼是數據訪問對象(DAO)和DAO的實現?

任何幫助或建議將是非常有幫助的。

+0

我只是寫一個包含List'的'類型本身有點類。你可以這樣創建一棵樹。例如,您也可以在類中具有一個可以基於id獲取對象的函數。讓它在'children'對象中遞歸搜索。只是一個想法。 – Hassan

回答

0

首先只選擇PARENT_ID。然後選擇ID在前一個結果數組中的所有內容(http://www.w3schools.com/sql/sql_in.asp)。

  • 從此,您可以在樹中創建父項,然後在展開時延遲加載子項。
  • 或者您可以立即與孩子一起填充樹木。您只需選擇所有PARENT_ID不爲NULL的地方並將它們附加到適當的父級(通過PARENT_ID)。

我不確定DAO與它有什麼關係。但是如果你只是想抽象一些,你可以使用DAO模式。

DAO可以有類似的方法:getAllParents,getChildrenForParentId,getAllChildren, ...

+0

你能給我一個構建樹的例子,並用其子節點...或任何參考填充樹... –

+0

我基本上告訴過你它的算法。你必須找出你的自我... –

+0

謝謝@Matjaz Muhic –

0

只是在做自我POM表引用(類名爲.java)與表型一對多註釋。

@OneToMany(fetch = FetchType.EAGER) 
@JoinColumn(name = "PARENT_ID",nullable=true) 
@OrderBy(clause = "NAME") 
@ForeignKey(name = "fk_child_project")  
private List<Project> projects= new ArrayList<Project>(); 
0

您需要的是Oracle Hierarchical query。由於您使用的是Oracle DB,因此您很幸運。

但是,通過Hibernate可以完成的唯一方法是使用本機查詢並將結果映射回對象。

0

太多的問題,我會盡量引導你在正確的方向 - 這可能不會讓你到你的目的地。

  • 創建Entities,見docs
  • 你可能不需要一個DAO,只需創建一個業務類來查詢數據庫。 (提示:您正在使用Hibernate的JPA實現使用情況EntityManager),見docs
  • 然後將其顯示爲在瀏覽器中的樹,假設你在web應用程序的工作

注:你作爲一個單獨的問題,可以再次問及如何提出具體問題。

相關線程