2015-09-25 87 views
0

嘗試循環使用直通for循環列表對象[]:Java對象[]循環錯誤

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

問題出在'setParameter(「empDetailsId」,result)'好像是給定的方法期待Long並且你正在傳遞Object [] –

+0

你試過用'Long'來投擲嗎?沒有數組,但是一個單一的實體?既然這就是你所期望的,那就是。 – Makoto

+1

你可以發表你正在使用的'query'嗎?我猜你的查詢只選擇一個字段而不是多個字段。 –

回答

0

的問題來自於事實,你選擇一個字段,這樣你就會有對象的列表不是在Object []列表。由於所選字段是您的ID,只需將類型設置爲長。

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

這樣你只選擇一個字段,所以只返回這個特定類型的對象的列表。