2016-07-07 1 views
0

Я пытаюсь получить отдельную запись из базы данных. это моя попыткаjava.lang.ClassCastException: java.lang.String нельзя передать в [Ljava.lang.Object; - выборка из базы данных с использованием hibernate

@SuppressWarnings("unchecked") 
    @Override 
    public List<Employee> getAllEmployees(String employeeName) { 
    String query = "SELECT DISTINCT e.name FROM Employees e WHERE e.name like '%"+ employeeName +"%'"; 
     List<Object[]> employeeObjects = hibernateUtil.fetchAll(query); 
     List<Employee> employees = new ArrayList<Employee>(); 
     for(Object[] employeeObject: employeeObjects) { 
      Employee employee = new Employee(); 
      long id = ((BigInteger) employeeObject[0]).longValue();   
      int age = (int) employeeObject[1]; 
      String name = (String) employeeObject[2]; 
      float salary = (float) employeeObject[3]; 
      employee.setId(id); 
      employee.setName(name); 
      employee.setAge(age); 
      employee.setSalary(salary); 
      employees.add(employee); 
     } 
     System.out.println(employees); 
     return employees; 
    } 

это линия ошибка возникает

for(Object[] employeeObject: employeeObjects) { //line 65 

Когда я пытаюсь искать записи я получаю эту ошибку

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; 
    com.ranga.dao.impl.EmployeeDAOImpl.getAllEmployees(EmployeeDAOImpl.java:65) 
    com.ranga.service.impl.EmployeeServiceImpl.getAllEmployees(EmployeeServiceImpl.java:48) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    com.sun.proxy.$Proxy23.getAllEmployees(Unknown Source) 
    com.ranga.controller.EmployeeController.searchEmployee(EmployeeController.java:73) 

пожалуйста, что может быть не так?

+0

Надеюсь, что [Маленькие столы Bobby] (https://xkcd.com/327/) не сработают для вас. –

+0

Не знаю, что делает 'hibernateUtil.fetchAll' - ваша проблема, вероятно, есть. –

+0

Какая строка вызывает исключение? – Stultuske

ответ

4

Ваш запрос:

SELECT DISTINCT e.name FROM Employees e WHERE e.name like '%"+ employeeName +"%' 

(Который не параметризируются Плохо Очень плохо Непослушный разработчик...!)

Поэтому вы выбираете уникальный e.name из Employees - это означает, что вы получите обратно часть имена.

Поэтому я подозреваю, что hibernateUtil.fetchAll возвращает List<String>.

Вы делаете:

List<Object[]> employeeObjects = hibernateUtil.fetchAll(query); 

Что я подозреваю, что это небезопасно литая из List<?> или List (сырой).

Вы затем сделать

for(Object[] employeeObject: employeeObjects) { 
... 
} 

На данный момент Java будет отбрасывать элемент в List к нужному типу, т.е. Object[]. Отсюда и ваша ошибка.