2017-08-10 1 views
0

J'ai une classe Vendor correspondant à une table Vendor dans ma base de données, et je souhaite récupérer des données de cette table. Quand j'utilise ceci:sélectionnez une requête dans hql

Query q = s.createQuery("from Vendor "); 
    java.util.Iterator itr = q.iterate(); 
    while (itr.hasNext()) { 
     Vendor v = (Vendor) itr.next(); 
     System.out.println(v.getVendor Id() + " " + v.getVendorName() + " " + v.getVendorRating()); 

Cela fonctionne très bien. Mais quand je veux faire la même chose en utilisant une requête select:

Query q = s.createQuery("select v.vendorId, v.vendorName, v.venderRating from Vendor v"); 
    Iterator itr = q.iterate(); 
    while (itr.hasNext()) { 
     Vendor v = (Vendor) itr.next(); 
     System.out.println(v.getVendorId() + " " + v.getVendorName() + " " + v.getVendorRating()); 
    } 

une erreur est relevée:

Exception dans le thread "principal" java.lang.ClassCastException: [Ljava.lang.Object ; ne peut pas être casté en com.apple.hibernate.vendor.Vendor

Que manque-t-il?

Répondre

0
"select v.vendorId, v.vendorName, v.venderRating from Vendor v" 

ne vous retourne un objet fournisseur, mais plutôt un Object[], chaque élément du tableau est une colonne.

Dans votre cas, il devrait être quelque chose comme:

Query q = s.createQuery("select v.vendorId, v.vendorName, v.venderRating from Vendor v"); 
    Iterator itr = q.iterate(); 
    while (itr.hasNext()) { 
     Object[] v = (Object[]) itr.next(); 
     System.out.println(v[0] + " " + v[1] + " " + v[2]); 
    } 

Le code n'est pas testé donc il peut être quelque peu défectueuse, mais la logique est là.

+0

cela a fonctionné, merci l'homme :) –

+0

Content d'entendre :) Vous pouvez accepter la réponse alors;) –