2015-09-25 4 views
0

Попытка петли через список в Object [], используя цикл:Java 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 
} 

Я получаю сообщение об ошибке в для линии контура:

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 в длинном формате) на основе цикла. Любая идея, почему он выбрасывает ошибку?

Я попытался изменить объект [] на длинный [], но произошла такая же ошибка.

EDIT: запрос

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

Проблема заключается в 'setParameter (" empDetailsId ", result)' кажется, что данный метод ожидает Long и вы проходите Object [] –

+0

Вы попробовали кастинг на 'Long' вместо этого? Нет массивов, но одно целое? Это то, что вы ожидаете от своего запроса. – Makoto

+1

можете ли вы отправить запрос, который вы используете? Я предполагаю, что ваш запрос выбирает только одно поле вместо нескольких полей. –

ответ

0

Проблема возникает из-за того, что вы выбираете, одно поле, так что вы будете иметь список объектов не список Object []. Поскольку выбранное поле является вашим идентификатором, просто установите для этого параметра значение «Длинные».

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

Таким образом вы выбираете только одно поле, поэтому возвращаете только список этого типа.

Смежные вопросы