2017-12-02 15 views
0

두 테이블이 아래와 같이 일대일 관계 인 UserRoles이 있습니다.자바 목록리스트 반복하기

User 
_________________________________________ 
| Id | user_name | full_name | creator | 
_________________________________________ 
| 1 | a   | A   | a  | 
| 2 | b   | B   | a  | 
| 3 | c   | C   | a  | 
| 4 | d   | D   | c  | 
| 5 | e   | E   | c  | 
| 6 | f   | F   | e  | 
| 7 | g   | G   | e  | 
| 8 | h   | H   | e  | 
| 9 | i   | I   | e  | 
|10 | j   | J   | i  | 
_________________________________________ 

Roles 
_______________________________________ 
| id | user_mgmt | others | user_id | 
_______________________________________ 
| 1 | 1  | 1  | 1   | 
| 2 | 0  | 1  | 2   | 
| 3 | 1  | 0  | 3   | 
| 4 | 0  | 1  | 4   | 
| 5 | 1  | 1  | 5   | 
| 6 | 0  | 1  | 6   | 
| 7 | 0  | 0  | 7   | 
| 8 | 0  | 0  | 8   | 
| 9 | 1  | 0  | 9   | 
________________________________________ 

Roles 테이블 boolean 열이, 그래서 Useruser_mgmt 역할이 있으면 그는 많은 사용자를 추가 할 수 있습니다 (AN 사용자가 추가 할 수있는 사용자 명확한 아니다). 사용자와 자식 사용자가 만든 모든 사용자를 가져 오려고합니다 (a는 부모, c는 a의 자식이며 e는 c ..의 자식입니다).

다음은 사용자

이 나에게 스택 오버플로 오류를 제공
public void loadUsers(){ 
    List<Users> users = new ArrayList<>(); 

    String creator = user.getUserName(); 
    List<Users> createdUsers = userService.getUsersByCreator(creator); 
    for(Users user : createdUsers) { 
    Roles role = createdUsers.getRoles(); 
    if(role.isEmpMgnt()){ 
     users.add(user); 
     loadUsers(); 
    } 
    } 
} 

를 가져 내 코드입니다. loadUsers()을 재귀 적으로 호출하지 않으면 단일 하위 결과 만 반환합니다. 그래서 거기에 어떤 해결책이 있습니까? 사전에 도움을 주셔서 감사합니다.

+0

모든 통화에 대해 사용자 배열을 다시 초기화합니다. 목록은 항상 비어있게됩니다. 사용자가 생성자인지 먼저 확인한 다음 for 루프 내부가 아닌 getUsersByCreator 메서드를 호출해야합니다. 코드를 정리할 필요가 있습니다.이 디자인은 메모리 누수로 인해 열리게됩니다. –

답변

1

a에 생성자가 a이므로 스택 오버플로 오류가 발생합니다. 따라서 사용자 a에게는 무한 루프가 있습니다. a의 경우 작성자를 null으로 설정하거나 코드에서 자체 참조를 건너 뜁니다. 또한 현재 사용자를 loadUsers() 메서드에 전달하고이 메서드로 만든 사용자 만 읽어야합니다. Like

public void loadUsers(String creator) 

해당 제작자가 만든 사용자 만 처리 할 수 ​​있습니다. 여기

String creator = user.getUserName(); 

어떤 사용자입니까? 제작자를 사용해야합니다. 질문은 어떻게 초기 창작자를 얻는가입니다. 아마도 초기 제작자는 제작자가 null 인 사용자 여야합니다.

+0

아니요, a의 작성자를 z로 변경했지만 여전히 같은 오류가 발생합니다. – Nazim

+0

답변을 업데이트했습니다. – Piro

+0

고마워요 @ 피로,이 내 문제가 해결되었습니다. – Nazim