Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
988 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  problème hibernate - linux - encoding

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème hibernate - linux - encoding

n°1164529
mazargman
Posté le 29-07-2005 à 11:53:36  profilanswer
 

Bonjour,
 
J'ai une petite appli web qui utilise hibernate comme couche de persistance. L'appli, en gros, c'est deux pages: une page pour faire une recherche et une page de résultats.
 
J'ai un problème avec les requêtes dont la clause where contient des caractères accentués. Par exemple, si je trace la requête hibernate suivante:
 

Code :
  1. from MaClasse where monChamp like '%tamère%'


 
... hibernate va me générer la requête SQL suivante:
 

Code :
  1. select ...blabla SQL...  where monChamp like '%tamÃ"re%'


 
... et du coup la requête va moins bien marcher!  :sweat:  
 
Clairement c'est un problème d'encoding qui d'ailleurs ne survient pas sous windows. Le problème vient de ma config sous linux mais quel élément?
 

  • navigateur? => je pense pas puisque j'écris 'tamère' dans l'input et je trace bien 'tamère' dans la requête hibernate
  • encoding du système?
  • mauvaises directives jsp pour spécifier l'encoding?


Pour infos:
 

  • j'utilise firefox
  • la variable d'environnement LANG est à fr_FR.UTF-8
  • toutes les références à encoding dans mon appli sont à UTF-8


 
Voilà, si vous avez une idée... Par ailleurs si vous avez une doc magique qui explique ces problématiques d'encoding, en particulier sur une plateforme linux, ben ça serait sympa de filer les références  :ange:  
 

mood
Publicité
Posté le 29-07-2005 à 11:53:36  profilanswer
 

n°1165342
the real m​oins moins
Posté le 30-07-2005 à 00:36:27  profilanswer
 

jsp et encoding au niveau de ta db

n°1168751
mazargman
Posté le 03-08-2005 à 12:11:08  profilanswer
 

merci pour ta réponse.
 
l'encoding de la db n'est pas en cause car le bug survient  au niveau de la construction de la requête SQL.
 
Concernant la jsp, tout est en utf-8 et, à l'aide du filtre SetCharacterEncodingFilter fourni dans les examples de struts, j'encode toute chaine de ma requête HTTP en UTF-8.
 
Mais hibernate créé quand même une requête avec ces caractères bidons.  
 
Je vais regarder le code d'hibernate, je trouverais bien l'endroit où la chaîne contenant des caractères accentués est touchée.
 
debugging mode power...
 
 

n°1168829
the real m​oins moins
Posté le 03-08-2005 à 13:25:28  profilanswer
 

mazargman a écrit :


l'encoding de la db n'est pas en cause car le bug survient  au niveau de la construction de la requête SQL.
Mais hibernate créé quand même une requête avec ces caractères bidons.  


tu vérifies ça comment ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1168900
mazargman
Posté le 03-08-2005 à 14:29:24  profilanswer
 

dans le fichier de conf d'hibernate, on peut demander le dump des requêtes SQL avec la propriété show_sql.
 
Si tu me poses cette question, c'est peut-êtr que tu veux m'orienter vers un problème d'encoding avec la console. En fait je trace aussi ma requête HQL et les caractères accentués apparaissent bien. Juste après il y a le 'createQuery' qui amène à la trace de la requête SQL avec les caractères bidons.
 
C'est ce qui me fait dire que c'est à partir du moment où hibernate prend la main que ça merdoie... mais ça ne veut pas dire que c'est hibernate qui merdoie non plus :/ D'ailleurs sous windows ça marche.
 

n°1168938
the real m​oins moins
Posté le 03-08-2005 à 14:55:39  profilanswer
 

mazargman a écrit :

dans le fichier de conf d'hibernate, on peut demander le dump des requêtes SQL avec la propriété show_sql.
 
Si tu me poses cette question, c'est peut-êtr que tu veux m'orienter vers un problème d'encoding avec la console. En fait je trace aussi ma requête HQL et les caractères accentués apparaissent bien. Juste après il y a le 'createQuery' qui amène à la trace de la requête SQL avec les caractères bidons.
 
C'est ce qui me fait dire que c'est à partir du moment où hibernate prend la main que ça merdoie... mais ça ne veut pas dire que c'est hibernate qui merdoie non plus :/ D'ailleurs sous windows ça marche.


clairement, la console et les caractères accentués, j'ai jamais vu ça bien marcher; y'a ptet un truc, mais je le connais pas. Avec un debugger ça donne quoi ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1169021
mazargman
Posté le 03-08-2005 à 15:45:10  profilanswer
 

En fait je trace dans un fichier donc le problème de la console est écarté.
 
 

n°1169320
the real m​oins moins
Posté le 03-08-2005 à 20:18:29  profilanswer
 

mouaif, remplacer une source de bugs par une autre hein ... >> debugger.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1169558
mazargman
Posté le 04-08-2005 à 00:25:06  profilanswer
 

c'te galère... Si j'ai bien compris Hibernate utilise un framework (antlr) pour transformer les requêtes HQL en requêtes SQL. C'est dans ce bouzin que la clause where est manipulée... bon ben j'y retourne.

n°1169560
the real m​oins moins
Posté le 04-08-2005 à 00:28:12  profilanswer
 

quelle version d'hibernate, au fait ?

mood
Publicité
Posté le 04-08-2005 à 00:28:12  profilanswer
 

n°1169561
the real m​oins moins
Posté le 04-08-2005 à 00:29:05  profilanswer
 

antlr, c'est pour *parser* tes requetes.

n°1169629
mazargman
Posté le 04-08-2005 à 08:28:35  profilanswer
 

hibernate 3.0.5.  
 
C'est effectivement au niveau du parsing qu'hibernate (avec le support de antlr) créé une structure à partir de la requête HQL. Une fois que la requête se trouve saucissonnée dans cette structure, le mal est fait. Suite au prochain numéro.

n°1169743
the real m​oins moins
Posté le 04-08-2005 à 12:30:45  profilanswer
 

mais j'comprend pas, tes chaines accentuées, c'est des parametres de tes requetes, pas des noms de champ, quand même? donc qu'est-ce que ça va faire dans ton hql ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1169764
mazargman
Posté le 04-08-2005 à 12:43:07  profilanswer
 

oui c'est un critère de recherche dans la clause where (cf. mon premier post pour un exemple).
 
hm, je crois comprendre ce que tu veux dire...
 
Au lieu d'écrire la requête HQL suivante:
 

Code :
  1. from MaTable where monChamp like '%tamère%'


 
je devrais écrire un truc du style:
 

Code :
  1. from MaTable where monChamp like ?


 
et entre mon 'createQuery' et mon 'list', j'appelle un setParameter.
 
Ca me parait être une très bonne idée et plus dans l'esprit de l'API (important l'esprit de l'API...). Pourquoi pas faire du SQL direct tant qu'on y est   :sarcastic:  
 
J'essaye.


Message édité par mazargman le 04-08-2005 à 14:35:32
n°1169816
the real m​oins moins
Posté le 04-08-2005 à 13:41:46  profilanswer
 

voilà
(sorry j'avais lu ton 1er post entre les lignes)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1169871
mazargman
Posté le 04-08-2005 à 14:33:49  profilanswer
 

hou pinaise, ça marche.
A l'opposé de M. Jourdain, je ne faisais pas vraiment du HQL dans ma clause where...
 
Ca va m'obliger a revoir toute la construction de ma clause where, mais tant pis: j'ai failli passer à côté d'un truc énorme.
you changed my life.  ;)

n°1170228
the real m​oins moins
Posté le 04-08-2005 à 22:10:07  profilanswer
 

hehe [:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  problème hibernate - linux - encoding

 

Sujets relatifs
probleme de date[Excel] probleme de formule
probleme DSN + PEAR DBprobleme de selection d element dans liste deroulante
[Access] - Probleme de critere conditionnel et champs nulsprobleme de mails dans html
probleme d'éxecutionProblème de clignottement et de lenteur
Probleme de dimensions dans un script de traitement d'image[VBA] Access, probleme de requete
Plus de sujets relatifs à : problème hibernate - linux - encoding


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR