2017-01-21 1 views
1

У меня есть эта функция, из которой я пытаюсь извлечь имя из таблицы с помощью SQL-запроса.получение ошибки java.lang.ClassCastException: java.lang.String не может быть применено к [Ljava.lang.Object;

@Override 
    @Transactional 
    public String getEmpNameFromId(long Id) { 
     final Session session = sessionFactory.openSession(); 
     String name = ""; 
     SQLQuery query = session.createSQLQuery("SELECT name from employee where id=" + Id); 
     List<Object[]> list = (List<Object[]>)query.list();//Object[] objs = (Object[])query.uniqueResult() 
     for (Iterator<Object[]> iterator = list.iterator(); iterator.hasNext();) { 
      Object[] e = iterator.next(); 
      name = (String)e[0];//case object type to another by youself... 
     } 
     return name; 
    } 

В моем объекте базы данных я вызываю эту функцию:

String empName = empDao.getEmpNameFromId(data.getId()); 
logger.info("name"+empName); 

интерфейс, имеющий функцию getEmpNameFromId является как:

public interface empDao { 
    String getEmpNameFromId(long Id); 
} 

Я получаю исключение, как:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; 

Нужна помощь здесь.

Заранее спасибо :)

+0

Попробуйте это вместо: 'name = e [0] .toString();' – DevilsHnd

+0

Повторите попытку, где возникает исключение. Он жалуется на незаконный отбор экземпляра 'String' на' Object [] ', и это не происходит в строке, где вы добавили комментарий. –

ответ

1

Если вы используете один столбец в запросе, тип результата элемента списка возвращается в виде единого Object. В противном случае, если используется много столбцов, тогда тип результата равен Object[] в строке.

Из документов:

public List list() throws HibernateException; 

возвращающие результаты запроса как List. Если запрос содержит несколько результатов pre row, результаты возвращаются в экземпляре Object[].

Изменить

List<Object[]> list = (List<Object[]>)query.list(); 

в

List list = query.list(); 

Тогда ваш результат должен возвращать только одну строку с String типом элемента List.

return (String)list.get(0); 
Смежные вопросы