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 :

Problème OR dans requete hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut Problème OR dans requete hibernate
    Bonjour,

    je développe actuellement une application qui utilise Hibernate pour l'accès à la BDD. Les requêtes effectuées sont générées dynamiquement par l'application en fonction des choix de l'utilisateurs, cependant, lorsque l'application génére une requête avec un "OR" le navigateur charge indéfiniment et je n'obtiens pas le résultat de ma requête alors que lorsqu'il n'y a que des clauses AND tout se passe bien...

    par exemple la requête suivante passe très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT personne.mail, pays.libelle
    FROM Personne personne, Pays pays, Langue langue
    WHERE langue.libelle LIKE '%chinois%'
    AND pays.id = personne.idPays
    AND langue.id = personne.idLangue
    AND langue.id = personne.idLangue;
    alors que pour celle-ci je n'obtiens jamais le résultat (sans pour autant obtenir d'erreurs :s)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT personne.mail, pays.libelle
    FROM Personne personne, Pays pays, Langue langue
    WHERE langue.libelle LIKE '%chinois%'
    OR langue.libelle LIKE '%russe%'
    AND pays.id = personne.idPays
    AND langue.id = personne.idLangue
    AND langue.id = personne.idLangue;
    De plus la requête Hibernate est bien générée. Cette requete est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate: select personne0_.MAIL as col_0_0_, pays1_.LIBELLE_PAYS as col_1_0_ from ANRQT_PERSONNE personne0_, ANRQT_PAYS pays1_, ANRQT_LANGUE langue2_ where langue2_.LIBELLE_LANGUE like '%chinois%' or (langue2_.LIBELLE_LANGUE like '%russe%') and pays1_.ID_PAYS=personne0_.ID_PAYS and langue2_.ID_LANGUE=personne0_.ID_LANGUE and langue2_.ID_LANGUE=personne0_.ID_LANGUE
    Y'a t-il une astuce pour placer une clause OR dans hibernate ou quelquechose que je fais mal?

    merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    N'est-ce pas simplement que ta requête prend beaucoup de temps ?
    As-tu beaucoup de données en base ?

    Que se passe-t-il si tu exécutes ta requête avec le SQL généré dans un outil adéquat ?

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut
    oui la base de données contient pas mal de données mais lorsque j'execute la requete avec juste un "AND" le resultat arrive immédiatement alors que la je viens d'attendre plus d'une demi heure avec le OR et toujours rien!!! Le Or peut il entrainer une telle augmentation de temps de traitement de la requete?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 25
    Par défaut
    Bien sur, execute ta requete SQL directement pour voir le temps qu'elle met

  5. #5
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Je vais dire une connerie (une de plus) mais il manque pas des parenthèses autour de ton OR?
    Ca devrait pas plutot etre
    SELECT personne.mail, pays.libelle
    FROM Personne personne, Pays pays, Langue langue
    WHERE
    (langue.libelle LIKE '%chinois%' OR langue.libelle LIKE '%russe%')
    AND pays.id = personne.idPays
    AND langue.id = personne.idLangue
    AND langue.id = personne.idLangue;
    Non parce que avec les parenthèses par exemple le SGBD pourrait se servir des index sur les idPays, et idLangue.
    Sans les parenthèses il doit évaluer le like '%chinois%' sur toutes les lignes, ce qui lui prend nécessairement plus de temps...
    De plus pourquoi y-a-t-il deux fois la jointure sur langue.id?

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut
    La double jointure est un petit problème lors de la génération de la requete... J'ai laissé tourner le temps de midi et effectivement c'est bien la requête qui était longue à executer car là j'ai bien le résultat attendu ^^

    Merci

Discussions similaires

  1. [WD20] problème syntaxe dans requete SQL
    Par jjacques68 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/04/2015, 20h52
  2. pb sum dans requete hibernate
    Par clairette dans le forum Hibernate
    Réponses: 1
    Dernier message: 03/07/2006, 10h34
  3. [SQL] Problème d'addition dans requete SQL
    Par cheers94wow dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/05/2006, 15h05
  4. [MySQL] Problme de variables dans requete
    Par eown dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/04/2006, 17h05
  5. Réponses: 2
    Dernier message: 11/01/2006, 15h49

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