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 :

Question Requéte hibernate


Sujet :

Hibernate Java

  1. #1
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut Question Requéte hibernate
    Bonjour,

    Une question SVP :

    Je voudrai faire une requéte hql ,à partir d'une liste multiple de "pays" par exemple la ou l'utilisateur peut choisir plusieurs pays à la fois et effectuer une requéte dessus ,avec un seul pays je faisais une requéte du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query req = getEntityManager().createQuery("SELECT c FROM location c WHERE country.nompays LIKE '%" +condition+ "%'");

    mais dans le cas ou j'ai plusieurs "condition" pour le "nompays" de country ? étant donné que j'utilise une liste select Multiple ...je ne sais pas combien de "condition" je vais avoir pour country !


    Quelqu'un pourrait m'orienter svp ?

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu peux utiliser un "in" au lieu d'un "like", mais du coup tu ne pourras pas utiliser le caractère %.
    Sinon il faut faire autant de like que de chaine à tester.

  3. #3
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Je récupère la sélection de ma liste dans un champs de saisie en les séparant par un ";" je pourrai faire une requête avec le contenu que je récupère de mon input text en utilisant le "in" ?

    Merci

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Oui tu peux, il te faudra adapter.
    Regarde du côté de setParameterList de la classe Query, ce sera plus propre que de concaténer des chaines.
    Sinon comme je te l'ai proposé tu peux faire plusieurs "like" séparés par des "or".
    A toi de voir.

  5. #5
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Merci de votre réponse .
    J'ai essayé de suivre votre conseil et choisir la façon la plus propre ,j'ai choisit setParameterList ,mais il m'affiche une erreur ,voici ma requéte Hibernate :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Query req = getEntityManager().createQuery("SELECT ob2 " +
    				"FROM Location as ob2  WHERE " +
    				"(ob2.country.landx in (:'%namesList%')) " +
    				"AND (ob2.zgm43 LIKE '%" +condition2+ "%')" +
    				"AND (ob2.subregion.region.zone.zzone_des LIKE '%" +condition3+ "%') " +
    				"AND (ob2.subregion.region.zregion_des LIKE '%" +condition4+ "%') " +
    				"AND (ob2.subregion.zsubregion_des LIKE '%" +condition5+ "%') " +
    				"AND (ob2.division.zdivision_des LIKE '%" +condition6+ "%') " );
    		req.setParameterList("namesList",list);

    mais j'ai une erreur au niveau de "setParameterList" qui dit que cette méthode est indefinit pour un type (String ,list<String>) et pourtant j'ai vu plusieurs exemples sur le net qui font ça !
    biensur ma liste est de type " List<String> list"


    Quelqu'un pourrait m'aider SVP ?

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    ob2.country.landx in (:'%namesList%')) " +
    Le "in", comme je te l'ai dit, ne peut pas s'utiliser avec le caractère générique %.
    Si tu veux absolument l'utiliser, il te faut un "like".
    Si tu peux t'en passer, remplace la ligne en question par celle-là.
    namesList devant être une liste de String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ob2.country.landx in (:namesList)) " +

  7. #7
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Ah oui c'est vrai ! j'avais oublié

    C'est bon c'est corrigé mais pour l'autre problème de la méthode il accepte toujours pas la syntaxe !

  8. #8
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    On m'a proposé une solution sans passer par le setParameterList !en utilisant le " in " toujours ..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Query req = getEntityManager().createQuery("SELECT ob2 FROM Location as ob2  WHERE " +
    				"(ob2.country.landx in  " + list + ")" +
    				"AND (ob2.zgm43 LIKE '%" +condition2+ "%')" +
    				"AND (ob2.subregion.region.zone.zzone_des LIKE '%" +condition3+ "%') " +
    				"AND (ob2.subregion.region.zregion_des LIKE '%" +condition4+ "%') " +
    				"AND (ob2.subregion.zsubregion_des LIKE '%" +condition5+ "%') " +
    				"AND (ob2.division.zdivision_des LIKE '%" +condition6+ "%') " );
    Mais je crois qu'il faut rajouter les cotes à chaque element de la liste pour que ça passe ..
    Je voulais savoir s'il y a un moyen d'introduire les cotes aux elements de la liste en java ?

    Je récupére ma variable de javascript en String et je la convertis en List<String> ...je ne vois pas comment je pourrai introduire les ' ' pour chaque élement .

  9. #9
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Probléme de " ' ' " résolu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList<String> list = new ArrayList<String>();
    			for (String s : cd1)
    				list.add("'" + s + "'");
    Mais la requéte marche toujours pas

  10. #10
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    C'est bon , c'est régle ,il fallait remplacer les '[ ]' par des parenthéses :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Query req = getEntityManager().createQuery("SELECT ob2 FROM Location as ob2  WHERE " +
    				"(ob2.country.landx in " + list.toString().replaceAll("\\]", ")").replaceAll("\\[", "(") + ")" +
    				"AND (ob2.zgm43 LIKE '%" +condition2+ "%')" +
    				"AND (ob2.subregion.region.zone.zzone_des LIKE '%" +condition3+ "%') " +
    				"AND (ob2.subregion.region.zregion_des LIKE '%" +condition4+ "%') " +
    				"AND (ob2.subregion.zsubregion_des LIKE '%" +condition5+ "%') " +
    				"AND (ob2.division.zdivision_des LIKE '%" +condition6+ "%') " );
    AAAh enfin je vais pouvoir passer à autre chose !!!

    Bonne journée à tous

  11. #11
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ca marche sans doute, mais que c'est moche !!!
    Désolé, mais les méthodes setXXX, ont leur utilité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur Hibernate
    Par Esil2008 dans le forum Hibernate
    Réponses: 2
    Dernier message: 16/07/2007, 15h11
  2. Question pour Hibernate avec une DataSource
    Par akademiks dans le forum Hibernate
    Réponses: 4
    Dernier message: 28/08/2006, 23h17
  3. Problème avec les requêtes hibernate
    Par joseph_p dans le forum Hibernate
    Réponses: 5
    Dernier message: 04/04/2006, 22h54
  4. Questions sur Hibernate
    Par errant dans le forum Hibernate
    Réponses: 3
    Dernier message: 27/03/2006, 14h18
  5. [Hibernate]Question sur Hibernate
    Par elhani dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/12/2005, 15h39

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