IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

insensibilité des accents dans une clause where (Critéria)


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut insensibilité des accents dans une clause where (Critéria)
    Bonjour,

    J'utilise Hibernate 3 et l'api Criteria.

    Je cherche à savoir qu'elle est l'instruction de l'API Criteria pour générer la function SQL translate().

    Je souhaite obtenir le SQL suivant : translate(MA_COLONNE, 'àâäçéèëêùûüôöïî', 'aaaceeeeuuuooii'). Pourquoi ? Car un simple Restrictions.ilike("maColonne", "qqchose") n'est que pour l'insensibilité de la casse et pas l'insensibilité des accents.

    Je cherche donc la méthode qui me permettra de générer la fonction translate() en SQL par l'API Criteria.

    Merci.

    PS : si vous avez une autre solution pour être insensible aux accents je suis preneur.

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    La sensibilité aux accents peut généralement se configurer au niveau SGBD dans les collations utilisées, si tu as le contrôle du schéma de la base.

    Et attention aux performances, si t'as pas d'index sur les expressions, ça risque d'être catastrophique.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Oui, j'ai la main sur le schéma de la base.

    Par contre je ne vois pas ce que tu veux dire par "se configurer au niveau SGBD dans les collations utilisées".

    Peux tu préciser cela ?

    --- Edit ---
    Après quelques recherches sur internet, ma base est en UTF-8 je pense que c'est ce que tu voulais dire avec collation.

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Si tu disais ce que c'est comme SGBD?

    Mais généralement lorsque tu crées tes bases ou tes tables, tu peux spécifier l'encoding et également le Collate ou Collation.
    Le collate décide généralement de ce qui est considéré comme égal / supérieur ou inférieur dans les comparaisons de chaîne (il affecte aussi les order by).

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Il s'agit oracle.

    Je vais faire des recherches sur les collate d'oracle voir ce que je peux obtenir avec ca.

  6. #6
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Je connais pas assez oracle.
    Si tu demandes sur le forum base de données comment définir une collation case insensitive sur tes tables, ils sauront surement.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Youpla,

    Donc pour mon premier post, voici peut etre un element de reponse :
    String critere = "%"+critere+"%";
    Restrictions.sqlRestriction("translate(MA_COLONNE, 'àâäçéèëêùûüôöïî', 'aaaceeeeuuuooii') ilike ?", critere, Hibernate.STRING);

    Et comme je suis en pleine forme, voici un deuxieme. Il faudrait peut etre voir a creuser pour effectuer une recherche par expression reguliere. Vu que je travaille avec Postgres, ca nous donne une requete de ce genre :
    SELECT ma_colonne
    FROM ma_table
    WHERE ma_colonne ~* 'qqch(ô|o|ö)s(e|é|è|ë|ê)'
    Apres, j y connais rien pour ce qui est des performances.

    Avant meme que la question ne vous traverse l esprit, non je n ai pas trouvé comment faire ca a partir de l API Criteria existante. La solution passerait par l ajout d une classe que l on appellerait PosixExpression, qui reprendrait le meme fonctionnement que org.hibernate.criterion.ILikeExpression mais qui produirait la sortie SQL précisée au dessus.
    Et pour les plus acharnés, etendre la classe Example pour lui faire utiliser des PosixExpression au lieu des ILikeExpression, pour pouvoir faire des recherches par Example, case-insensitive ET accent-insensitive.

    A bon entendeur/codeur/analyste-programmeur/developpeur, salut !

Discussions similaires

  1. Utilisation des alias dans la clause WHERE d'une requête SELECT
    Par OursRêveur dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 13/07/2013, 04h34
  2. Ordre des conditions dans une clause WHERE, important ou pas en 2012 ?
    Par clavier12AZQSWX dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/03/2012, 11h54
  3. Utilisation des index (dans une clause WHERE)
    Par Jean-Jacques Engels dans le forum Langage SQL
    Réponses: 12
    Dernier message: 01/02/2012, 11h15
  4. Réponses: 1
    Dernier message: 03/02/2006, 12h35
  5. Ordre des tests dans la clause WHERE
    Par Tans98 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/09/2004, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo