问题如下,所有对象后面的id一样,导致只有第一个可以查看内容,后面的则无法展开。如下图所示:
开始并不明白那个id是什么意思,以为是主键id,因为没有设置主键id所致。百度一下才明白这个id是分配给对象的唯一标识,id相同表明是同一个对象。
查看一下源代码:
private Collection<UserNew> convertToUserTmp(List<Object[]> list) {
List<UserNew> userList = new ArrayList<UserNew>();
Department dept = new Department();
UserNew userNew = new UserNew(); //问题所在
for(Object[] obj:list){
userNew.setUsername(null != obj ? obj[0].toString() : "");
userNew.setEmpName(null != obj ? obj[1].toString() : "");
userNew.setEmpDutyName(null != obj[2].toString() ? obj[2].toString() : "");
userNew.setUserRole(null != obj[3] ? obj[3].toString() : "");
userNew.setId(Long.valueOf(obj[4].toString()));
dept.setDeptCode(obj[5].toString());
dept.setDeptName(obj[6].toString());
dept.setParentCode(obj[7].toString());
userNew.setDept(dept);
userNew.setStatusFlag(obj[8].toString());
userList.add(userNew);
}
return userList;
}
每次将数据放入userNew对象中,最后将userNew对象添加到userList。但每次循环都是用的同一个userNew对象,所以导致其实是一个对象。
将代码改为:
private Collection<UserNew> convertToUserTmp(List<Object[]> list) {
List<UserNew> userList = new ArrayList<UserNew>();
Department dept = new Department();
for(Object[] obj:list){
UserNew userNew = new UserNew();//每次都定义一个新对象,则不会出问题
userNew.setUsername(null != obj ? obj[0].toString() : "");
userNew.setEmpName(null != obj ? obj[1].toString() : "");
userNew.setEmpDutyName(null != obj[2].toString() ? obj[2].toString() : "");
userNew.setUserRole(null != obj[3] ? obj[3].toString() : "");
userNew.setId(Long.valueOf(obj[4].toString()));
dept.setDeptCode(obj[5].toString());
dept.setDeptName(obj[6].toString());
dept.setParentCode(obj[7].toString());
userNew.setDept(dept);
userNew.setStatusFlag(obj[8].toString());
userList.add(userNew);
}
return userList;
}
每次循环都定义一个新对象就没问题了。