JPA requête native rejoindre renvoie l'objet, mais de déréférencement de lance de la classe cast exception
Je suis en utilisant JPQL requête Native de rejoindre la table et du résultat de la requête est stockée dans List<Object[]>
.
public String getJoinJpqlNativeQuery() {
String final SQL_JOIN =
"SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username,
t1.anotherNum FROM MasatosanTest t1
JOIN MasatoView v1 ON v1.username = t1.username;"
System.out.println("get join jpql native query is being called
============================");
EntityManager em = null;
List<Object[]> out = null;
try {
em = EmProvider.getDefaultManager();
Query query = em.createNativeQuery(SQL_JOIN);
out = query.getResultList();
System.out.println("return object ==========>" + out);
System.out.println(out.get(0));
String one = out.get(0).toString(); //LINE 77 where ClassCastException
System.out.println(one);
}
catch(Exception e) {
}
finally {
if(em != null) { em.close; }
}
}
Le problème est
System.out.println("return object ==========>" + out);
sorties:
return object ==========>
[[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020],
[false, 0, 2010-12-21 15:32:53.0, koga, 0.213]]
System.out.println(out.get(0))
sorties:
[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020]
Donc, je suppose que je peut affecter la valeur de retour d'.get(0), ce qui devrait être la Chaîne:
String one = out.get(0).toString();
Mais j'ai la bizarre ClassCastException.
java.lang.ClassCastException: java.util.Vector cannot be cast to
[Ljava.lang.Object;
at local.test.jaxrs.MasatosanTestResource.getJoinJpqlNativeQuery
(MasatosanTestResource.java:77)
Donc ce qui se passe vraiment? Même Object[] foo = out.get(0);
jeter un ClassCastException 🙁
OriginalL'auteur masato-san | 2010-12-27
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas familier JPQL requête Native, mais il vous suffit de débogage avec:
Object o=.get(0);
Système..println(o.getClass());
Ensuite travailler à partir de là. Si c'est un vecteur, de parcourir et de trouver ce qui est dans le vecteur.
Comment est-à propos de instanceof? Si instanceof Vecteur puis le jeter.
OriginalL'auteur LazyCubicleMonkey
La clause SELECT requêtes plus d'une colonne ou d'une entité, les résultats sont regroupés dans un tableau d'objet (Object[]) dans le java.util.Liste retournée par getResultList( ).
Edit :
Pour éviter de jeter de façon explicite, vous pouvez aller pour un constructeur d'expression, l'ajout d'un constructeur à l'entité avec les arguments appropriés.
Édité ma réponse en conséquence, peut vous aider.
OriginalL'auteur Nayan Wadekar