是的,所以我一直在研究这个项目,我正在使用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()为空。
对此有何看法?
答案 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然后运行循环。
希望这有帮助!