Java Object []循环错误

时间:2015-09-25 06:54:58

标签: java

尝试使用for循环遍历列表Object []:

String query = "Employee.findEmployeeIdByEmployeeType";
List<Object[]> empIdDtoLst = (List<Object[]>)em.createNamedQuery(query).setParameter("employeeType", empType).getResultList();

for (Object[] result : empIdDtoLst) {  <-- ERROR
    logger.info("Number " + result);

    Object[] empDetailIdDtoLst = (Object[])em.createNamedQuery(query).setParameter("empDetailsId", result).getSingleResult();  <-- USE HERE
}

我在for循环行中遇到错误:

2015-09-25T14:50:09.115+0800|Warning: StandardWrapperValve[DispatcherServlet]: Servlet.service() for servlet DispatcherServlet threw exception
java.lang.ClassCastException: java.lang.Long cannot be cast to [Ljava.lang.Object;
at com.syntronic.dao.impl.JobDaoImpl.getListOfEmployees(JobDaoImpl.java:352)
at com.syntronic.service.impl.JobServiceImpl.getListOfEmployees(JobServiceImpl.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

基本上,我需要使用如上所述的值(整数)来基于循环查找记录(长格式的id)。知道为什么它会抛出错误吗?

我确实尝试将Object []更改为long []但发生了同样的错误。

编辑:查询

@NamedQuery(name="Employee.findEmployeeIdByEmployeeType", query="SELECT e.empId FROM Employee e where e.employeeType=:employeeType")

1 个答案:

答案 0 :(得分:0)

问题来自于您选择一个字段,因此您将拥有一个对象列表而不是一个对象列表[]。由于所选字段是您的ID,因此只需将类型设置为Long。

 List<Long> empIdDtoLst = (List<Long>)em.createNamedQuery(query).setParameter("employeeType", empType).getResultList();
 for (Long result : empIdDtoLst) {  
     logger.info("Number " + result);
 }

这样您只选择一个字段,因此只返回此特定类型对象的列表。