データベースから値を取得したいのですが、私の場合は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());
}
どんな助けも喜びです:)
@ラフィアン、これはどういう意味ですか??
List<Switcher> result = (List<Switcher>) 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<SwitcherServiceSource>) LoadSource.list();
これは、SwitcherServiceSource
テーブルの各列にスカラー値を持つObject配列(Object [])のリストを返します。 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;
}
そのため、ここではクエリからobjectを抽出していますが、フィールドの束ではありません。また、はるかにきれいに見えます。
クエリを実行すると、Object[]
。
List result_source = LoadSource.list();
for(Object[] objA : result_source) {
// read it all
}
クエリで.list()を呼び出す前にquery.addEntity(SwitcherServiceSource.class)を追加する必要があります。