[Ljava.lang.Object; 无法施展

我想从数据库中获取值,在我的情况下,我使用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 result_source = (List) LoadSource.list(); for(SwitcherServiceSource tes : result_source){ System.out.println(tes.getSERVICE()); } 

任何帮助都会很愉快:)

@raffian,你的意思是这样吗?

 List result = (List) LoadSource.list(); for(Switcher tes : result){ System.out.println(tes.getSERVICE()); } 

 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to id.co.bni.switcherservice.model.SwitcherServiceSource 

问题是

 (List) LoadSource.list(); 

这将返回一个对象数组列表(Object []),其中包含SwitcherServiceSource表中每列的标量值。 Hibernate将使用ResultSetMetadata来推断返回的标量值的实际顺序和类型。

 List result = (List) 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 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 users = (List) query.list(); return users; } 

所以这里我们从查询中提取对象 ,而不是一堆字段。 它看起来更漂亮。

您的查询执行将返回Object[]列表。

 List result_source = LoadSource.list(); for(Object[] objA : result_source) { // read it all } 

您需要在调用查询时使用.list()之前添加query.addEntity(SwitcherServiceSource.class)