2012-05-30 5 views
0

Spring-hibernate Framework 및 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 

지금 내가이 기록은 자신의 부모 - 자식 관계에 따라 표시됩니다 트리보기를 만들 수 있습니다 ... 테이블이 다음과 같은 기록을 가지고있다 말해봐. Like this ...

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

이제 데이터베이스에서 동적으로 레코드를 가져 오는 트리를 만드는 방법을 알려줄 수 있습니다. 그리고 DAO (Data Access Object)와 DAO의 구현은 무엇입니까?

어떤 도움이나 제안이 도움이 될 것입니다.

+0

관련 스레드. 그런 식으로 나무를 만들 수 있습니다. 예를 들어 ID를 기반으로 객체를 얻을 수있는 클래스의 함수를 가질 수도 있습니다. '자식'객체에서 재귀 적으로 검색해야합니까? 그냥 생각. – Hassan

답변

0

먼저 PARENT_ID 만 선택하십시오. 그런 다음 ID가있는 모든 항목을 선택하려면 이전 결과 배열 (http://www.w3schools.com/sql/sql_in.asp)을 입력하십시오.

  • 이렇게하면 트리에서 부모를 만든 다음 확장시 어린이를 게으른로드 할 수 있습니다.
  • 또는 자녀를 즉시 트리로 채울 수 있습니다. PARENT_ID가 아닌 곳을 모두 선택하고 적절한 부모 (PARENT_ID 기준)에 연결하십시오.

DAO와 어떤 관련이 있는지 잘 모르겠습니다. 그러나 당신이 단지 DAO 패턴을 사용할 수있는 추상화를 원한다면. 많은 주석에 목록 유형 하나 getAllParents, getChildrenForParentId, getAllChildren, ... POM에서

+0

당신은 내가 나무를 만들고 그 자식 노드들로 나무를 채우는 예제를 줄 수있다. ... 또는 어떤 참조 ... –

+0

나는 기본적으로 그것을위한 알고리즘을 말했다. 당신은 자신을 위해 나머지를 생각해야합니다 ... –

+0

thanks @Matjaz Muhic –

0

그냥 만든 자기 테이블 참조 (된 .java 클래스) :

DAO 같은 방법을 가질 수있다.

@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를 통해 수행 할 수있는 유일한 방법은 네이티브 쿼리를 사용하고 결과를 다시 Objects에 매핑하는 것입니다.

0

너무 많은 질문이 있으면, 나는 올바른 방향으로 안내하려고 노력할 것입니다. 귀하의 목적지로 내려 가지 않을 수도 있습니다.

  • 당신은 바로 데이터베이스를 조회 할 수있는 비즈니스 클래스를 생성하는 DAO를 필요로하지 않을 수도 있습니다 docs
  • 를 참조하십시오 Entities을 만듭니다. 당신이 웹 애플리케이션에서 작업하는 가정, 귀하의 브라우저에있는 나무로 표시 그런 다음 docs
  • 를 참조, (힌트 : 당신이 Hibernate의 JPA 구현을 사용하는 경우 EntityManager 사용)

참고 :당신에게 다시 올 수 있으며 어떻게 별도의 질문으로 구체적인 질문을 할 수 있습니다.

난 그냥`List`의 유형 자체를 포함하는 작은 클래스를 작성할 것