尝试使用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")
答案 0 :(得分:0)
问题来自于您选择一个字段,因此您将拥有一个对象列表而不是一个对象列表[]。由于所选字段是您的ID,因此只需将类型设置为Long。
List<Long> empIdDtoLst = (List<Long>)em.createNamedQuery(query).setParameter("employeeType", empType).getResultList();
for (Long result : empIdDtoLst) {
logger.info("Number " + result);
}
这样您只选择一个字段,因此只返回此特定类型对象的列表。