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 :

Comment faire un WHERE IN( ) (Peut on utiliser elements( )?)


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut Comment faire un WHERE IN( ) (Peut on utiliser elements( )?)
    Bonjours
    J'ai une association 1-N avec InfHostingSite a plusieurs InfPlatform.

    J'ai besoin d'executer un "WHERE IN"
    J'ai essayé cette méthode mais ça ne marche pas.
    Peut on référencé une liste dans une requête comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    s = "from InfHostingSite ";
    		query = session.createQuery(s);
    		List sites = query.list();
     
    		printList(sites);
     
    		s = "from InfPlatform p where p.InfHostingSite in elements(sites)";
    		query = session.createQuery(s);
    		platforms = query.list();
    Sinon Quelle est la bonne manière?

    Merci

  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
    Ton parametre "sites" ne prendra pas la valeur de ta collection puisque tu l'initialises en dur.
    Essaie comme ça :

    s = "from InfPlatform p where p.InfHostingSite in elements(:sites)";
    query = session.createQuery(s).setParameter("sites", sites);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Oui c'est vrai c'est plus correcte comme ça mais j'ai toujours une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    15:35:02,384 DEBUG QueryPlanCache:70 - unable to locate HQL query plan in cache; generating (from InfPlatform p where p.InfHostingSite in elements(:sites))
    15:35:02,384 DEBUG QueryTranslatorImpl:246 - parse() - HQL: from test.hibernate.InfPlatform p where p.InfHostingSite in elements(:sites)
    15:35:02,384 ERROR PARSER:33 - line 1:70: expecting IDENT, found ':'
    15:35:02,399 DEBUG ErrorCounter:28 - line 1:70: expecting IDENT, found ':'
    line 1:70: expecting IDENT, found ':'
    	at antlr.Parser.match(Parser.java:211)
    	at org.hibernate.hql.antlr.HqlBaseParser.identifier(HqlBaseParser.java:1545)
    En faite je ne comprends pas trop comment fonctionne la fonction elements().

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    euh si ton mapping est correct, tu ne devrais pas avoir à te prendre la tête avec elements

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    s = "from InfHostingSite i where ...";
    query = session.createQuery(s);
    List sites = query.list();
     
    s = "from InfPlatform p where p.InfHostingSite in (:sites)";
    query = session.createQuery(s).setParameter("sites", sites);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Merci,
    Ca passe la ligne du setParameters mais ca plante juste en dessous.

    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
    16:19:20,024 DEBUG Printer:90 - test.hibernate.InfHostingSite{InfObjectmiscellaneousinfo=null, InfPlatforms=<uninitialized>, InfDescription=null, InfAddress=null, InfName=pf11, VsObject=2363}
    16:19:20,024 DEBUG Printer:90 - test.hibernate.InfHostingSite{InfObjectmiscellaneousinfo=, InfPlatforms=<uninitialized>, InfDescription=, InfAddress=, InfName=matt, VsObject=3293}
    Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList
    	at org.hibernate.type.EntityType.toLoggableString(EntityType.java:463)
    	at org.hibernate.pretty.Printer.toString(Printer.java:76)
    	at org.hibernate.engine.QueryParameters.traceParameters(QueryParameters.java:277)
    	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:151)
    	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    	at test.test.Test1.testInstance(Test1.java:116)16:19:20,040 DEBUG Printer:90 - test.hibernate.InfHostingSite{InfObjectmiscellaneousinfo=null, InfPlatforms=<uninitialized>, InfDescription=null, InfAddress=null, InfName=PFAB, VsObject=2667}
    16:19:20,074 DEBUG Printer:90 - test.hibernate.InfPlatform{InfClusters=<uninitialized>, InfPlatformProfile=test.hibernate.InfPlatformProfile#51, InfHostingSite=test.hibernate.InfHostingSite#2363, InfDescription=, InfEquipments=<uninitialized>, InfName=test_cmg, VsObject=2454, InfTelco=null}
    16:19:20,074 DEBUG Printer:90 - test.hibernate.InfHostingSite{InfObjectmiscellaneousinfo=null, InfPlatforms=<uninitialized>, InfDescription=null, InfAddress=null, InfName=OMP, VsObject=3083}
    16:19:20,074 DEBUG DefaultAutoFlushEventListener:53 - Dont need to execute flush
    16:19:20,123 DEBUG HQLQueryPlan:150 - find: from InfPlatform p where p.InfHostingSite in (:sites)
     
    	at test.test.Test1.main(Test1.java:63)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		s = "from InfHostingSite ";
    		query = session.createQuery(s);
    		List sites = query.list();
     
    		printList(sites);
     
    		s = "from InfPlatform p where p.InfHostingSite in (:sites)";
    		query = session.createQuery(s).setParameter("sites", sites); 
     
    		List listPlatforms = query.list();

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    En faite j'ai trouvé il fallait utiliser la méthode setParameterList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    s = "from InfPlatform p where p.InfHostingSite in (:sites)";
    		//query = session.createQuery(s).setParameter("sites", sites); 
    		query = session.createQuery(s).setParameterList("sites", sites);
     
    		List platforms2 = query.list();

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

Discussions similaires

  1. Comment faire un code qui peut limiter l'installation?
    Par Zizou7 dans le forum Débuter
    Réponses: 5
    Dernier message: 29/06/2010, 14h31
  2. Réponses: 0
    Dernier message: 22/07/2009, 18h34
  3. comment faire un where seulement si une valeur existe ?
    Par talvins dans le forum Débuter
    Réponses: 2
    Dernier message: 08/07/2009, 09h33
  4. Réponses: 0
    Dernier message: 11/12/2007, 11h42
  5. Réponses: 3
    Dernier message: 19/06/2007, 22h34

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