当前位置:编程学习 > JAVA >>

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 --------------------编程问答--------------------
引用 3 楼  的回复:
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]+"");
} --------------------编程问答--------------------
引用 10 楼  的回复:
cannot be cast to entity  空指针转换异常



用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊? --------------------编程问答--------------------
引用 5 楼  的回复:
Ljava.lang.Object; cannot be cast to entity报错并不是空指针异常,而是类型转换错误。
可能是查询出来的对象不对,你可以打印下list.get(i)看看是什么东西。
或者Object[] ob = list.get(i)  然后打印ob[]里面的东西,看看是什么就知道问题出在哪里了


用 from Emp mgr 和 comm 字段 如果为空的话 就会报错 该怎么弄啊? --------------------编程问答--------------------
引用 4 楼  的回复:
引用 3 楼 的回复:

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 字段 ……


你在处理这2个字段的时候先判断是否为空,然后+你的处理逻辑啊 --------------------编程问答-------------------- 只有是先判断在取值了 --------------------编程问答--------------------
引用 14 楼  的回复:
引用 4 楼  的回复:
引用 3 楼 的回复:

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……




数据库里 存在空列的话   数据根本取不到list 里   怎么判断? --------------------编程问答--------------------
引用 16 楼  的回复:
引用 14 楼 的回复:

引用 4 楼 的回复:
引用 3 楼 的回复:

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 字段 如果为空的话 就会报错 该怎么弄啊?

你是说查询时mgr 子段为空,会报错?
mgr这个字段对应的属性用封装类型就好了 --------------------编程问答-------------------- 类型转换的问题,你Emp emp = (Emp)list.get(i);就行了! --------------------编程问答--------------------
引用 18 楼  的回复:
类型转换的问题,你Emp emp = (Emp)list.get(i);就行了!

是滴……………………………………………… --------------------编程问答-------------------- 直接用hql语句 "from Emp"就可以得到一个list了,里面存的是Emp对象,这样就可以遍历了 --------------------编程问答-------------------- 找到错误了  谢谢各位了!!  原来我实体类里 里有个int 类型   所以数据库中有空字段就会报错了! --------------------编程问答-------------------- 你的list里面是object类型的,你看着先把obj的数据都搞成emp的就行了
--------------------编程问答-------------------- 数据库设计时 加入 NOT NULL,可以试一下。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,