2011-11-22 30 views
0

對,我一直在這個項目上工作了一段時間,而且我正在使用JDBC + JSF。我現在有3個DAO,用戶,組和用戶組。JDBC多對一映射/空指針異常錯誤

我的問題是..如何建立3個類,用戶,組和UserGroups之間的關係?

在我的數據庫中,UserGroup是一個關聯實體,它具有IDUSer和IDGroup作爲主複合關鍵字。

User和UserGroup之間的關係是1到Many。組和UserGroup之間的關係也是1對多,UserGroup與用戶和組都有多對一的關係。

如果我想創建User和UserGroup,Group和UserGroup之間的關係,這是正確的嗎?

public class UsuariousGrupos { 

Integer id_usuario; 
Integer id_grupo; 
Grupos groups; 
Usuarious users; 

public UsuariousGrupos() { 
} 

public UsuariousGrupos(Integer id_usuario, Integer id_grupo) { 
    this.id_usuario = id_usuario; 
    this.id_grupo = id_grupo; 
} 

public Integer getId_grupo() { 
    return id_grupo; 
} 

public void setId_grupo(Integer id_grupo) { 
    this.id_grupo = id_grupo; 
} 

public Integer getId_usuario() { 
    return id_usuario; 
} 

public void setId_usuario(Integer id_usuario) { 
    this.id_usuario = id_usuario; 
} 

public Grupos getGroups() { 
    return groups; 
} 

public void setGroups(Grupos groups) { 
    this.groups = groups; 
} 

public Usuarious getUsers() { 
    return users; 
} 

public void setUsers(Usuarious users) { 
    this.users = users; 
} 

此外,我測試了我的DAO連接,他們工作正常。我能夠從我的用戶數據庫表和組數據庫表中顯示名稱/描述。但是,由於我的UserGroup表只存儲了ID,所以我只能顯示這些ID。我想顯示與ID相關的用戶/組的名稱/描述。然而,當我做到以下幾點:

List<UsuariousGrupos> ugdList = ugd.list() ; 
    System.out.println("List of users successfully queried: " + ugdList); 
    System.out.println("Thus, amount of usergroups in database is: " + ugdList.size()); 
    for (int i = 0; i < ugdList.size(); i++) { 
     System.out.println("Groups in database are: " + ugdList.get(i).getUsers().getNome()); 
     System.out.println("Users in database are: " + ugdList.get(i).getGroups().getDescricao()); 
    } 

我在線程「主要」顯示java.lang.NullPointerException得到一個例外。顯然,我無法從我的用戶組列表中訪問用戶和組對象:/,這導致我認爲我錯過了類之間的某種關係。

的零指示字例外發生在這些行:

System.out.println("Groups in database are: " + ugdList.get(i).getUsers().getNome()); 
System.out.println("Users in database are: " + ugdList.get(i).getGroups().getDescricao() 

顯然,ugdList.get(ⅰ).getUsers()和ugdList.get(ⅰ).getGroups()都爲空。

對此有何看法?

+0

您需要提供實際的異常,或者更具體地指定爲空的行/字段。更好的辦法是讓你調試你的代碼並找出哪個變量爲空,並用這些信息編輯你的問題。 – Gray

回答

0

您需要映射每個用戶的名稱和重載用戶類的這樣的toString方法:

public String toString() 
{ 
return String.format(""%s %s", this.name, this.lastName); 
} 

順便說一句,ugdList.get(I).getUsers()getNome() );看來我錯了 但在使用之前應用toString方法,你可以這樣做:

for (User user : ugdList.get(i).getUsers()) 
{ 
printf(user); 
} 

,但是你應該之前的步驟測試ugdList.get(I).getUsers():即得到 檢查(I) .getUsers!= null然後運行循環。

希望這會有所幫助!