Comment puis-je utiliser typcasting à l'intérieur d'un JPQL déclaration?
J'ai deux Integer
colonnes dans la base de données derby et db2). J'ai besoin de les séparer les uns avec les autres à l'intérieur d'un JPQL
.
Les deux colonnes de type Integer
retour à zéro si le reste est un nombre décimal.e.g 0.25
devient 0
etc et c'est compréhensible puisque le type est int.
Dans SQL
je pourrais avoir cette par exemple
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
mais qu'est-ce que JPQL
équivalent .
Une option pourrait être (je n'ai pas encore essayé) est une @Transient
méthode dans l'entité de retourner le type Decimal et de faire ce calcul et le passer à JPQL
mais je préfère laisser les SQL
faire ce travail.
Mysql ne nécessite pas de casting au niveau base de données . Donc des Comportements différents SGBDR est différent, ce qui est bien . Mais que doit-JPQL faire sans avoir besoin d'utiliser une requête native de savoir que la fonte à la décimale est nécessaire pour cette opération.
Ajoutant dialecte <property name="openjpa.jdbc.DBDictionary" value="derby"/>
n'a pas le fixer.
Veuillez noter qu'il est JPA1
OriginalL'auteur Shahzeb | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
Vous avez trois options.
pour appeler le constructeur et à l'intérieur que les appels, vous pouvez gérer les
les types de données qui seront transmises à SQL mais vous obtiendrez plus d'un
type d'objets, ce qui est bien juste obtenir la droite de la droite
index de tableau.En savoir plus sur cette ici.
OriginalL'auteur Java Ka Baby
Que la division de l'opérateur effectue la division entière sur les arguments entiers est une caractéristique. Dans MySQL, vous devez choisir explicitement
div
pour la division entière et/
pour floating point de la division, alors qu'en JPQL le choix est fait automatiquement tout comme en Java.Je suggère donc de:
BigDecimal
, qui peut ne pas être ce qui est attendu (par exemple,Double
). Cependant, j'ai trouvé une excellente solution pour ce problème ici: stackoverflow.com/questions/34786148/...OriginalL'auteur Old Pro
Autant que je sache, il n'y a pas un moyen de faire ce genre de fonte en JPQL.
Je suggère l'utilisation de JPA natif de l'exécution de la requête qui permet d'exécuter une requête SQL comme vous le feriez si vous étiez à l'aide de JDBC.
Par exemple:
ou
Pouvez-vous préciser pourquoi vous vous attendez à ce dialecte pour faire automatiquement le casting?
parce que la division de deux nombres entiers produire un type de données différent en fonction sous-jacente de la base de données. Par exemple
Mysql
renvoie une virgule où, commeDerby
etDB2
entier qui change0.25
à0
par exemple . Il ya avant dialecte doit connaître le comportement et fournir un machinisme surtout que l'option de conversion n'est pas disponible dans "JPQL'.OriginalL'auteur idanmo