43 votes

Comment écrire une requête hql avec cast ?

J'ai besoin de combiner deux tables en utilisant hql, les deux ont une colonne commune, mais table1 La colonne commune est integer y table2 La colonne commune est String

Par exemple,

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where a.id=b.studid

Ici a.id est un integer tandis que b.stduid es un string mais les données des deux colonnes sont les mêmes.

Comment puis-je obtenir le résultat de la requête en utilisant la requête hql ?

74voto

axtavt Points 126632

HQL supporte CAST (si la base de données sous-jacente le supporte), vous pouvez l'utiliser :

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b
where cast(a.id as string) = b.studid 

Voir aussi :

6voto

01es Points 2891

Vous devez vraiment vous demander pourquoi vous avez besoin de joindre deux entités par des propriétés de types différents. Cela suggère très probablement que certaines des entités doivent être remaniées, ce qui pourrait inclure le changement des types de données pour les colonnes des tables de base de données sous-jacentes. Si le modèle est correct, il ne sera pas nécessaire de tordre Hibernate.

2voto

Eduard Points 1428

Je viens de remarquer que vous utilisez JPA, où il n'est pas possible d'exprimer ou de convertir les types de données. Dans le langage de requête, seules les valeurs de même type peuvent être comparées ! read in http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu

1voto

Alferd Nobel Points 336

J'ai dû le mouler à String comme ça :

 @Query( value = "select new com.api.models.DResultStatus("+
            "cast(ds.demoId as java.lang.String),cast(ds.comp as java.lang.String),cast(ds.dc as java.lang.String),cast(be.buildUrl as java.lang.String)")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X