0

我正在使用 Spring-hibernate 框架和 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

4 回答 4

0

您需要的是Oracle 分层查询。由于您使用的是 Oracle DB,因此您很幸运。

但是通过 Hibernate 可以做到这一点的唯一方法是使用本机查询并将结果映射回对象。

于 2012-05-30T07:38:27.177 回答
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>(); 
于 2012-05-30T07:27:30.940 回答
0

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

  • 从此,您可以在树中创建父级,然后在展开时延迟加载子级。
  • 或者你可以立即用孩子填充树。您只需选择所有 PARENT_ID 不为 NULL 的地方并将它们附加到适当的父级(通过 PARENT_ID)。

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

DAO 可以有如下方法:getAllParents、getChildrenForParentId、getAllChildren、 ...

于 2012-05-30T07:08:17.480 回答
0

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

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

注意: 您可以再次来询问有关如何的具体问题,作为一个单独的问题。

相关线程

于 2012-05-30T08:17:47.540 回答