hibernate 查询数据 无法遍历 求助高手
select empno,ename,job,nvl(mgr,0),hiredate,sal,nvl(comm,0),deptno from Emp能查询到出来放到 list集合里 但是遍历不出来
具体代码:
public List<Emp> findEmpAll(){
List<Emp> list = new ArrayList();
Session session = new Configuration().configure().buildSessionFactory().openSession();
String hql = "select empno,ename,job,nvl(mgr,0),hiredate,sal,nvl(comm,0),deptno from Emp" ;
Query query = session.createQuery(hql);
list = query.list();
return list;
}
public static void main(String[] args) {
EmpDao dao = new EmpDao();
List<Emp> list = dao.findEmpAll();
System.out.println(list.size());
for (int i=0; i<list.size();i++){
Emp emp = list.get(i);
System.out.println(emp.getComm());
}
}
控制台输出:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select emp0_.empno as col_0_0_, emp0_.ename as col_1_0_, emp0_.job as col_2_0_, nvl(emp0_.mgr, 0) as col_3_0_, emp0_.hiredate as col_4_0_, emp0_.sal as col_5_0_, nvl(emp0_.comm, 0) as col_6_0_, emp0_.deptno as col_7_0_ from EMP emp0_
14
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to entity.Emp
at entity.EmpDao.main(EmpDao.java:33)
--------------------编程问答--------------------
可以这样遍历
for (Emp emp :list ) {
System.out.println(emp.getComm());
}
}
--------------------编程问答-------------------- select empno,ename,job,nvl(mgr,0),hiredate,sal,nvl(comm,0),deptno from Emp
你是sql语句呢?还是hql语句?
如果是hql,那么你的nvl(mgr,0),nvl(comm,0)是对应哪个属性???
--------------------编程问答-------------------- select empno,ename,job,nvl(mgr,0),hiredate,sal,nvl(comm,0),deptno from Emp
你用这样的语句去查询得到的结果是一个Object[]数据的list而不是你Emp对象的list,
如果你想要得到Emp对象的list就用 from Emp --------------------编程问答--------------------
用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊? --------------------编程问答-------------------- Ljava.lang.Object; cannot be cast to entity报错并不是空指针异常,而是类型转换错误。
可能是查询出来的对象不对,你可以打印下list.get(i)看看是什么东西。
或者Object[] ob = list.get(i) 然后打印ob[]里面的东西,看看是什么就知道问题出在哪里了 --------------------编程问答-------------------- String hql = "select empno,ename,job,nvl(mgr,0),hiredate,sal,nvl(comm,0),deptno from Emp" ;中使用了nvl(mgr,0)和 nvl(comm,0) ,最后查询出来的list中的对象不是Emp,所以就报你对象无法转换 --------------------编程问答-------------------- Ljava.lang.Object; cannot be cast to entity报错并不是空指针异常,而是类型转换错误。
可能是查询出来的对象不对,你可以打印下list.get(i)看看是什么东西。
或者Object[] ob = list.get(i) 然后打印ob[]里面的东西,看看是什么就知道问题出在哪里了
--------------------编程问答-------------------- 你执行的非hql。所以执行处来后不是 Emp 对象,而是一个个object对象,你只能将这些数据强制转换为Emp对象属性,在生成Emp对象 --------------------编程问答-------------------- 你好像应该这样写:
Query query = session.createQuery(hql);
List resultlist = query.list();
for(int i<0;i<resultlist.size();i++){
Object[] obj=(Object[])result.get(i);
Emp emp=new Emp();
emp.setEmpno(obj[0]);
emp.setEmpname(obj[1]);
...
...
...
list.add(emp);
}
最后再返回list --------------------编程问答-------------------- cannot be cast to entity 空指针转换异常
--------------------编程问答-------------------- 那在在取每一个数据时进行判断
if(obj[0]!=null){
emp.setEmpno(obj[0]+"");
} --------------------编程问答--------------------
用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊? --------------------编程问答--------------------
用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊? --------------------编程问答--------------------
你在处理这2个字段的时候先判断是否为空,然后+你的处理逻辑啊 --------------------编程问答-------------------- 只有是先判断在取值了 --------------------编程问答--------------------
数据库里 存在空列的话 数据根本取不到list 里 怎么判断? --------------------编程问答--------------------
用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊?
你是说查询时mgr 子段为空,会报错?
mgr这个字段对应的属性用封装类型就好了 --------------------编程问答-------------------- 类型转换的问题,你Emp emp = (Emp)list.get(i);就行了! --------------------编程问答--------------------
是滴……………………………………………… --------------------编程问答-------------------- 直接用hql语句 "from Emp"就可以得到一个list了,里面存的是Emp对象,这样就可以遍历了 --------------------编程问答-------------------- 找到错误了 谢谢各位了!! 原来我实体类里 里有个int 类型 所以数据库中有空字段就会报错了! --------------------编程问答-------------------- 你的list里面是object类型的,你看着先把obj的数据都搞成emp的就行了
--------------------编程问答-------------------- 数据库设计时 加入 NOT NULL,可以试一下。
补充:Java , Web 开发