[Ljava.яз..Объект; не может быть приведен к
Я хочу получить значение из базы данных, в моем случае я использую List
, чтобы получить значение из базы данных, но я получил эту ошибку
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to id.co.bni.switcherservice.model.SwitcherServiceSource
at id.co.bni.switcherservice.controller.SwitcherServiceController.LoadData(SwitcherServiceController.java:48)
at id.co.bni.switcherservice.controller.SwitcherServiceController.main(SwitcherServiceController.java:62)
Это мой код
Query LoadSource = session_source.createQuery("select CLIENT,SERVICE,SERVICE_TYPE,PROVIDER_CODE,COUNT(*) FROM SwitcherServiceSource" +
" where TIMESTAMP between :awal and :akhir" +
" and PROVIDER_CODE is not null group by CLIENT,SERVICE,SERVICE_TYPE,PROVIDER_CODE order by CLIENT,SERVICE,SERVICE_TYPE,PROVIDER_CODE");
LoadSource.setParameter("awal", fromDate);
LoadSource.setParameter("akhir", toDate);
List<SwitcherServiceSource> result_source = (List<SwitcherServiceSource>) LoadSource.list();
for(SwitcherServiceSource tes : result_source){
System.out.println(tes.getSERVICE());
}
Любая помощь будет удовольствием :)
@raffian, ты это имел в виду??
List<Switcher> result = (List<Switcher>) LoadSource.list();
for(Switcher tes : result){
System.out.println(tes.getSERVICE());
}
4 ответа:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to id.co.bni.switcherservice.model.SwitcherServiceSource
Проблемы
(List<SwitcherServiceSource>) LoadSource.list();
Это вернет список массивов объектов (Object []) со скалярными значениями для каждого столбца в таблице
SwitcherServiceSource
. Hibernate будет использовать данные resultsetmetadata для того, чтобы определить фактический порядок и типы возвращаемых значений скаляра.Решение
List<Object> result = (List<Object>) LoadSource.list(); Iterator itr = result.iterator(); while(itr.hasNext()){ Object[] obj = (Object[]) itr.next(); //now you have one array of Object for each row String client = String.valueOf(obj[0]); // don't know the type of column CLIENT assuming String Integer service = Integer.parseInt(String.valueOf(obj[1])); //SERVICE assumed as int //same way for all obj[2], obj[3], obj[4] }
Связанная Ссылка
Я столкнулся с такой проблемой и копаю тонны материала. Таким образом, чтобы избежать уродливой итерации, вы можете просто настроить свой hql:
Вам нужно сформулировать запрос следующим образом
select entity from Entity as entity where ...
Также проверьте такой случай, он отлично работает для меня:
public List<User> findByRole(String role) { Query query = sessionFactory.getCurrentSession().createQuery("select user from User user join user.userRoles where role_name=:role_name"); query.setString("role_name", role); @SuppressWarnings("unchecked") List<User> users = (List<User>) query.list(); return users; }
Итак, здесь мы извлекаем объект из запроса, а не кучу полей. Кроме того, он выглядит гораздо красивее.