Java中的动态树创建

时间:2012-05-30 06:54:28

标签: java spring hibernate

我正在使用Spring-hibernate Framework和Oracle数据库。现在有一个名为project的表。每条记录都有唯一的id,name和parent_id列。假设该表有以下记录......

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的实现..

任何帮助或建议都会非常有用。

4 个答案:

答案 0 :(得分:0)

首先只选择PARENT_ID。然后选择ID在上一个结果数组中的所有内容(http://www.w3schools.com/sql/sql_in.asp)。

  • 然后,您可以在树中创建父级,然后在扩展时延迟加载子级。
  • 或者你可以和孩子一起填充树木。您只需选择PARENT_ID为NOT NULL的所有位置,并将它们附加到适当的父级(通过PARENT_ID)。

我不确定DAO与它有什么关系。但是如果你只想要一些抽象,你可以使用DAO模式。

DAO可以使用以下方法: getAllParents,getChildrenForParentId,getAllChildren, ......

答案 1 :(得分:0)

在POM(.java类)中创建自我表引用,其中List类型为一对多注释。

@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>(); 

答案 2 :(得分:0)

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

但是,通过Hibernate实现这一目标的唯一方法是使用本机查询并将结果映射回Objects。

答案 3 :(得分:0)

太多问题,我会尽力引导你朝着正确的方向前进 - 这可能不会让你到达目的地。

  • 创建Entities,查看docs
  • 您可能不需要DAO,只需创建一个业务类来查询数据库。 (提示:如果您使用的是Hibernate的JPA实现,请使用EntityManager),请参阅docs
  • 然后在浏览器中将其显示为树,假设您正在使用webapp

注意: 您可以再来一次,就具体问题提出具体问题。

相关主题