problème hibernate - linux - encoding - Java - Programmation
Marsh Posté le 03-08-2005 à 12:11:08
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...
Marsh Posté le 03-08-2005 à 13:25:28
mazargman a écrit : |
tu vérifies ça comment ?
Marsh Posté le 03-08-2005 à 14:29:24
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.
Marsh Posté le 03-08-2005 à 14:55:39
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. |
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 ?
Marsh Posté le 03-08-2005 à 15:45:10
En fait je trace dans un fichier donc le problème de la console est écarté.
Marsh Posté le 03-08-2005 à 20:18:29
mouaif, remplacer une source de bugs par une autre hein ... >> debugger.
Marsh Posté le 04-08-2005 à 00:25:06
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.
Marsh Posté le 04-08-2005 à 08:28:35
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.
Marsh Posté le 04-08-2005 à 12:30:45
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 ?
Marsh Posté le 04-08-2005 à 12:43:07
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 :
|
je devrais écrire un truc du style:
Code :
|
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
J'essaye.
Marsh Posté le 04-08-2005 à 13:41:46
voilà
(sorry j'avais lu ton 1er post entre les lignes)
Marsh Posté le 04-08-2005 à 14:33:49
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.
Marsh Posté le 04-08-2005 à 22:10:07
Reply
Marsh Posté le 29-07-2005 à 11:53:36
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:
... hibernate va me générer la requête SQL suivante:
... et du coup la requête va moins bien marcher!
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?
Pour infos:
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