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] Requête avec un LIKE %% case insensitive


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut [Hibernate] Requête avec un LIKE %% case insensitive
    Bonjour,
    je dois effectuer une requête (avec Hibernate) en utilisant la commande LIKE mais sans se soucier de la casse.

    En cherchant à droite et à gauche, j'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select t_soutien.id,t_soutien.criticite,t_soutien.etat,t_soutien.id_intervenant,
    t_soutien.lib_dem,t_soutien.orig_dem,t_soutien.application from T_Dem_S t_soutie
    n where 1=1 AND UPPER(t_soutien.lib_dem) like UPPER('%BN%')
    Ensuite en cherchant un peu plus, j'ai trouvé un exemple plus performant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    AND INSTR(UPPER(t_soutien.lib_dem), UPPER('BN'))
    ...
    Mais le problème c'est que ça ne marche pas. J'ai comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    javax.servlet.ServletException: unexpected AST node: ( near line 1, column 189 [Select t_soutien.id,t_soutien.criticite,t_soutien.etat,t_soutien.id_intervenant,t_soutien.lib_dem,t_soutien.orig_dem,t_soutien.application from tables.T_Dem_S t_soutien where 1=1 AND INSTR(UPPER(t_soutien.lib_dem), UPPER('%BN%'))]
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
     
     
    root cause 
     
    org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 189 [Select t_soutien.id,t_soutien.criticite,t_soutien.etat,t_soutien.id_intervenant,t_soutien.lib_dem,t_soutien.orig_dem,t_soutien.application from tables.T_Dem_S t_soutien where 1=1 AND INSTR(UPPER(t_soutien.lib_dem), UPPER('%BN%'))]
    	org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
    	org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
    	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    	utils.SearchDem.getDemS(Unknown Source)
    	utils.SearchDem.execute(Unknown Source)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
    Pourquoi ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Tu peux faire ça :
    List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.sql("lower({t_soutien}.lib_dem) like lower(?)", "BN", Hibernate.STRING) )
    .list();

    Et même utiliser des jokers... %...
    Par contre, tes éléments sont objets ou colonnes SQL ?
    Car leur nommage semble non Java, t_soutien => tSoutien en Java et dc en ojet ! Et avec les requêtes criterai ou HQL, il faut utiliser tes objets et non les colonnes de ta base.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Je ne comprends pas très bien ta proposition.
    Peux-tu être un peu plus clair, stp ?

    En ce qui concerne les noms, elles concernent des colonnes SQL.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Il ne faut pas confondre noms SQL et Objets !
    Dans des requêtes en createSQLQuery, t'auras les noms de ta bse SQL !
    Dans des requêtes criteria ou HQL : cretaQuery, t'auras les noms objets.

    T'as un exemple de criteria dans la doc, pile sur les like... lower, upper...

    chapitre :
    15.2. Restriction du résultat

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    En cherchant un peu, je comprends mieux la restriction avec Hibernate.
    Par contre, je faisais des tests avec les dates comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql_query += " AND DAY(t_soutien.date_aff) = DAY('"+ transformDate(date_deb_search) + "')";
    sql_query += " AND MONTH(t_soutien.date_aff) = MONTH('"+ transformDate(date_deb_search) + "')";
    sql_query += " AND YEAR(t_soutien.date_aff) = YEAR('"+ transformDate(date_deb_search) + "')";
    TransformDate me renvoie la date sous le bon format (yyyy-MM-dd)
    Par contre, je n'arrive pas à le faire sous Hibernate....

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crit.add(Restrictions.eq("date_aff", stringToDate(transformDate(date_deb_search), "yyyy-MM-dd")));

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  2. Requête avec Paramètre LIKE
    Par marcant77 dans le forum iReport
    Réponses: 2
    Dernier message: 23/04/2009, 11h52
  3. Like Case Insensitive
    Par locs dans le forum Administration
    Réponses: 18
    Dernier message: 23/01/2009, 15h04
  4. [SQL] Erreur sur une requète avec un Like
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h29
  5. Réponses: 1
    Dernier message: 23/06/2006, 19h10

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