Je veux obtenir de la valeur de la base de données, dans mon cas j'utilise List
pour obtenir la valeur de la base de données mais j'ai eu cette erreur
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)
c'est mon code
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());
}
toute aide sera un plaisir :)
@raffian, vouliez-vous dire comme ça ??
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
Le problème est
(List<SwitcherServiceSource>) LoadSource.list();
Cela renverra une liste de tableaux d'objets (Object []) avec des valeurs scalaires pour chaque colonne de la table SwitcherServiceSource
. Hibernate utilisera ResultSetMetadata pour déduire l'ordre et les types réels des valeurs scalaires renvoyées.
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]
}
J'ai fait face à un tel problème et creuser des tonnes de matériel. Donc, pour éviter une itération laide, vous pouvez simplement régler votre hql:
Vous devez encadrer votre requête comme ceci
select entity from Entity as entity where ...
Vérifiez également ce cas, cela fonctionne parfaitement pour moi:
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;
}
Donc, ici, nous extrayons objet de la requête, pas un tas de champs. C'est aussi beaucoup plus joli.
L'exécution de votre requête renverra la liste de Object[]
.
List result_source = LoadSource.list();
for(Object[] objA : result_source) {
// read it all
}
Vous devez ajouter query.addEntity (SwitcherServiceSource.class) avant d'appeler le .list () sur la requête.