JDBC多对一映射/空指针异常错误

时间:2011-11-22 18:09:52

标签: java jdbc

是的,所以我一直在研究这个项目,我正在使用JDBC + JSF。

我目前有3个DAO,用户,群组和用户组。

我的问题是..如何在3个类,用户,组和用户组之间建立关系?

在我的数据库中,UserGroup是一个关联实体,它将IDUSer和IDGroup作为主要复合键。

User和UserGroup之间的关系是1到Many。 Groups和UserGroup之间的关系也是1到Many,UserGroup与User和Groups的关系是多对一的。

如果我想在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());
    }

我在线程“main”java.lang.NullPointerException中得到一个Exception。显然,我无法从我的UserGroup列表中访问Users和Groups对象:/,这使我认为我错过了类之间的某种关系。

空指针异常发生在以下行:

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(i).getUsers()和ugdList.get(i).getGroups()为空。

对此有何看法?

1 个答案:

答案 0 :(得分: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(): 检查get(i).getUsers!= null然后运行循环。

希望这有帮助!