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 :

[Hibernate] Recherche dans un champ


Sujet :

Hibernate Java

  1. #1
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut [Hibernate] Recherche dans un champ
    Bonjour,

    Dans le cadre d'un projet J2EE utilisant hibernate, je souhaite faire une recherche sur un champ texte dans ma base de données (pour un petit moteur de recherche). Afin d'obtenir un maximum de resultats pertinents, je souhaite retirer les accents du champ de la BD afin de le comparer à la chaine de carateres saisie par l'utilisateur, elle même sans accents (après traitements).

    Je souhaiterais faire une requete du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query q = em.createQuery("from Personne as p where FonctionRetirerAccents(p._nom)='dupont'");
    Je ne sais pas s'il est possible sous hibernate (je débute) de créer une fonction comme j'ai mis dans l'exemple (FonctionRetirerAccents()), si oui comment faire ? Sinon quelle solution dois-je adopter ?

    Merci d'avance !
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

  2. #2
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Personne n'a d'idées ??

    J'ai pensé faire peut être une méthode dans ma classe persistente qui me retournerait le nom sans accents. Il faudrait rendre cette méthode non persistente (attribut @transient ?).

    Dans le principe ça donnerait ça :

    Méthode de ma classe persistente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Transient 
    public String getNomSansAccent() {
          return retireAccents(_nom);
    }
    requete HQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from Personne as p where p.getNomSansAccent() ='maChaineDeCaracteres'
    Mais dans la pratique ca marche pas

    Erreur :
    Exception in thread "main" - SQL Error: 1305, SQLState: 42000
    - FUNCTION p.getNomSansAccent does not exist
    org.hibernate.exception.SQLGrammarException: could not execute query
    Comment faire ???
    Merci
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

  3. #3
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Toujours rien...

    Autre piste : la fonction COLLATE est-elle compatible avec hibernate ? (je suis actuellement sur Mysql mais je vais bientot migrer sur SQL Server)
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    pour un de nos projets, nous avons eu le même problème... n'ayant pas eu beaucoup de temps pour faire des recherches sur ce problème, nous avons utilisé une méthode pas très propre mais elle fonctionne.

    En fait, on avait à faire une recherche sur un champs précis dans une table, on a alors dupliqué ce champs lors de la création pour écrire la même chaine de caractère mais sans les caractères accentués. Et lors de la recherche, on retire les accents de la chaine de recherche, et ensuite il suffit de faire une "bête" recherche sur ce champs

    En espérant que ca puisse t'aider

  5. #5
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Je ne sais pas sur quel base tu es, mais tu peux essayer la fonction REPLACE. Je l'ai teste rapidement sur MySQL et ca a l'air de fonctionner (du moins la reqête ne plante pas).

    Ca donnerait donc :
    "from Personne as p where REPLACE(p._nom,'é','e')='dupont'". Si ca ne marche pas, cela signifie que le dialect SQL que tu utilises n'implemente pas la fonction REPLACE. Il faudrait etendre la classe dialect que hibernate fournit pour implementer ta propre fonction REPLACEt.

    Angelo

  6. #6
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Merci pour vos réponses, je vais tester la fonction REPLACE...c'est pas très pratique mais visiblement y'a pas trop de solution.

    Je reste ouvert à d'autre solution (s'il en existe).

    Merci
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

Discussions similaires

  1. recherche dans deux champs
    Par schwarzy2 dans le forum Access
    Réponses: 2
    Dernier message: 10/04/2007, 17h09
  2. [SQL Server] rechercher dans plusieurs champs d'une table
    Par houla! dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2006, 09h37
  3. [SQL2k][FullText] Recherche dans un champ binaire
    Par NeoMan dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/07/2006, 14h36
  4. Recherche dans un champ binaire
    Par roots_man dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/08/2005, 08h45
  5. Recherche dans un champs binaire
    Par roots_man dans le forum ASP
    Réponses: 3
    Dernier message: 29/08/2005, 08h30

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