Hibernate requête native - char(3) de la colonne
J'ai une table dans Oracle où la colonne SC_CUR_CODE est de type CHAR(3)
Quand je fais:
Query q2 = em.createNativeQuery("select sc_cur_code, sc_amount from sector_costs");
q2.setMaxResults(10);
List<Object[]> rs2 = q2.getResultList();
for (Object[] o : rs2) {
System.out.println(">>> cur=" + o[0]);
}
Je vois cur=E
et cur=U
au lieu de cur=EUR
et cur=USD
o[0]
est un java.lang.Caractère
Comment puis-je obtenir la pleine valeur EUR
et USD
?
OriginalL'auteur Guus | 2011-02-02
Vous devez vous connecter pour publier un commentaire.
Il ressemble à Hibernate lit la valeur de type
CHAR(n)
commeCharacter
. Essayez de le jeter auxVARCHAR(n)
:Lors de l'utilisation d'Hibernate via
Session
interface, vous pouvez explcitly définir un type de résultat avecaddScalar()
à la place (également accessible viaunwrap()
en JPA 2.0):Il y a beaucoup de questions en suspens relatives à ce problème dans Hibernate JIRA, à partir de HHH-2220.
Voici une explication par Max Rydahl Andersen de HHH-2220 commentaires:
Si vous avez votre requête native décrit dans Hibernate mappages de fichier de configuration, vous devez définir
<return-scalar ...>
pour chaque valeur renvoyée. Remarque: Vous devez énumérer toutes les valeurs de retour, comme lorsque vous définissez les types de retour explicitement, la détection automatique est éteint et seulement déclaré les colonnes sont retournées.merveilleux explan!!!
j'ai une colonne de type char(10). et j'obtiens le message d'erreur quand j'essaie de fonte ( ..comme VARCHAR) . il fonctionne très bien lorsque j'utilise cast(.... en tant que CHAR)
J'ai une colonne de type CHAR(1) et lors de l'utilisation d'hibernate et simple createQuery il peut être géré correctement par hibernate dans la chaîne, mais quand je suis à l'aide de createNativeQuery, donc sauter hibernate moteur, j'ai adopter votre suggestion dans la requête: select cast(my_flag comme VARCHAR2(1)). Il fonctionne
OriginalL'auteur axtavt