2012-05-30 45 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应用程序的工作

注:你作为一个单独的问题,可以再次问及如何提出具体问题。

相关线程