Comment retourner une liste spécifique de type, au lieu d'une Liste<Object[]> en veille prolongée?
J'ai arborescence de classes:
classA {
classB b;
classC c;
.....
}
J'ai requête HQL comme ceci:
SELECT a.field1, b.field2, c.field3, c.field4
FROM a LEFT OUTER JOIN b ON a.id = b.fk
LEFT OUTER JOIN c ON b.id = c.fk
Cette requête renvoie List<Object[]>
.
Est-il possible de jeter les données renvoyées à la classe suivante:
classD {
Type1 fiedl1;
Type2 field2;
Type3 field3;
}
Peut donc moulage être faite par Hibernate ou j'ai besoin de faire manuellement tous les casting?
select a from a left outer join b on a.id=b.fk left outer join c on b.id=c.fk
Est-ce que vous cherchez?Pas de. requête retourne une Liste<Object[]>, mais je voudrais que la requête retourne une Liste<classD>
stackoverflow.com/questions/18361558/...
OriginalL'auteur user810430 | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Il existe différents types de sélectionne en JPA requêtes. Vous êtes actuellement en utilisant un Tableau comme un type de retour, ce que vous avez besoin est de Construire le type de retour. Voici comment procéder:
Il existe essentiellement deux choses:
Lire la suite sur le sélectionne dans JPA2 requêtes.
Je suis de l'utilisation Partagée de la Session de Contrat, donc je n'ai pas le
entityManager
objet. De toute façon pour contourner ce problème?OriginalL'auteur JMelnik
Vous pouvez utiliser TypedQuery
The select list of the query must contain only a single item, which must be assignable to the type specified by the resultClass argument
. Et hibernate sources disent"Cannot create TypedQuery for query with more than one return using requested result type [" + resultClass.getName() + "]"
. Donc, fondamentalement, il va jeter IllegalArgumentException - si la chaîne de requête est jugée invalide ou si le résultat de la requête n'est pas cessible pour le type spécifiéEh bien, mon HQL a l'air bien. Vous avez raison à propos de tout.
OriginalL'auteur nullpotent
Si vous êtes vraiment sûr que vous pouvez faire de ce type de jette.
Être prudent avec ce que
Donc oui. Manuel de casting. (remarque: avec les tableaux (vous pouvez directement cast) )
OriginalL'auteur tgoossens
j'ai eu le même problème..j'ai écrit cette requête
et je suis retourné à la liste de l'objet et dans le servlet j'ai écrit,
java.util.Liste objList= objFacultyService.listFaculty_sql(1);
OriginalL'auteur Tejash Raval Prajapati
Si vous utiliser Hibernate 5.x, vous pouvez utiliser un
ResultTransformer
, comme, par exemple, décrit dans ce blog. Notez queResultTransformer
sera @Deprecated dans Hibernate 6.Appliqué à votre scénario:
Le code ci-dessus suppose
classD
a un constructeurclassD(Type1, Type2, Type3)
.Un avantage de cette approche est qu'il vous permet de définir la
ResultTransformer
une fois et vous permet de les réutiliser dans toutes les requêtes ayant le même type de résultat.OriginalL'auteur ptikobj