web-dev-qa-db-fra.com

[Ljava.lang.Object; ne peut pas être converti en

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());
}
20
splatter_fadli
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.

Solution

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]
}

Lien connexe

41
Aniket Kulkarni

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.

5
Gleb S

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
}
2
vels4j

Vous devez ajouter query.addEntity (SwitcherServiceSource.class) avant d'appeler le .list () sur la requête.

2
Mahaveer Jangir