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 :

[HQL]select conditionnel avec set


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut [HQL]select conditionnel avec set
    Bonjour,

    j'ai deux classes Table et Personne qui donnent naissance à trois tables lestables, personnes, lestables_personnes par une relation many-to-many.
    La troisième table est construite sur la clé primaire des deux autres : LESTABLE_ID et PERS_ID.
    Au niveau des classes le lien est fait par un set pjs dans la classe table.

    Je voudrais sélectionner toutes les tables dont une personne d'identifiant x est pj.

    J'ai essayé beaucoup de choses mais rien ne marche...
    Pour l'instant j'en suis arrivée à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List listjours=session.createQuery("Select t.jour From Table t Where t.pjs.PERS_ID=:id")
    		.setParameter("id", id).list();
    où id est l'identifiant de ma personne.

    j'ai pas trouvé dans la doc d'hibernate comment faire pourtant je pense que ça doit être un style de requète assez courant.
    Quelqu'un pourrait-il m'aider?
    merci

  2. #2
    Membre chevronné

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Par défaut
    Quel type d'erreur as-tu, si erreur tu as.

    Ta requête me semble bonne, mais j'ai du mal à comprendre ton model de données.

    Normalement, tu peut utiliser le mot clé JOIN dans ta requète HSQL pour faire une jointure entre deux table, si c'est ce que tu veut faire.

    Si tu pouvait donner plus de détail sur ce que tu obtient, et aussi les mapping hibernate de tes classes.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    Tout d'abord, à quoi ressemble cette partie de l'appli?

    BDD : trois tables provenant de deux classes

    La classe personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Personne {
     
    	private Long id;
    	private String nom;
    	private String adresse;
    	private String telephone;
    	private String mail;
    	private String fonction;
     
    ...
    }
    et la classe table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Table {
     
    	private Long id;
    	private Long numero;
    	private Long mj;
    	private Long jeu;
    	private String jour;
     
    	private Set pjs = new HashSet();
    ...
    }
    Voilà le code des fichiers de déclaration pour la BDD :

    personne.hbm.xml:
    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
     
    <hibernate-mapping>
    	<class name="persist.Personne" table="PERSONNES">
    		<id name="id" column="PERS_ID">
    			<generator class="native"/>
    		</id>
    		<property name="nom"/>
    		<property name="adresse"/>
    		<property name="telephone"/>
    		<property name="mail"/>
    		<property name="fonction"/>
     
     
    	</class>
    </hibernate-mapping
    et table.hbm.xml :

    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
     
    <hibernate-mapping>
    	<class name="persist.Table" table="LESTABLES">
    		<id name="id" column="LESTABLES_ID">
    			<generator class="native"/>
    		</id>
    		<property name="numero"/>
    		<property name="mj"/>
    		<property name="jeu"/>
    		<property name="jour"/>
     
    		<set name="pjs" table="LESTABLES_PERSONNES" lazy="false">
    			<key column="LESTABLE_ID"/>
    			<many-to-many column="PERS_ID" class="persist.Personne"/>
    		</set>
    	</class>
    </hibernate-mapping>
    Ceci donne naissance à trois tables :

    personnes
    PERS_ID
    nom
    adresse
    ...

    lestables
    LESTABLES_ID
    numero
    ...

    et

    lestables_personnes
    LESTABLES_ID
    PERS_ID

    Alors voilà ce que je veux faire : récupérer toutes les tables dont ma personne x est pj. C'est à dire dont l'identifiant apparaît dans le champs PERS_ID de la table lestables_personnes.

    Le problème est que cette table ne correspond à aucune classe directement (mais là j'ai peut-être mal compris un truc).

    Voilà la requète que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List listjours=session.createQuery("Select t.jour From Table t Where t.pjs.PERS_ID=:id")
    						.setParameter("id", id).list();
    et voilà l'erreur que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    org.hibernate.QueryException: could not resolve property: PERS_ID of: persist.Personne [Select t.jour From persist.Table t Where t.pjs.PERS_ID=:id]
    	at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
    	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
    	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1310)
    	at org.hibernate.persister.collection.AbstractCollectionPersister.toType(AbstractCollectionPersister.java:1435)
    	at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:280)
    	at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:373)
    	at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:539)
    	at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:221)
    	at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:172)
    	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
    	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
    Je ne sais pas comment faire la jointure puisqu'il faut donner le nom des classes et non des tables dans la requète

    j'espère que c'est plus clair

    merci

  4. #4
    Membre Expert
    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
    Par défaut
    Premier point, si tu utilises le HQL, tu dois utiliser les propriétés de tes objets dans ta requête et non pas le nom de tes colonnes de tables.

    Essaie ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List listjours=session.createQuery("Select t.jour From Table t inner join t.pjs personne Where personne.id=:id").setParameter("id", id).list();

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 36
    Par défaut
    T'es trop fort!!!

    Ca marche nickel. Merci beaucoup

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

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. selection conditionnel avec des listes
    Par Invité dans le forum Excel
    Réponses: 3
    Dernier message: 21/04/2012, 14h47
  3. [HQL] Select avec jointure
    Par jeoff dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/11/2006, 12h12
  4. Requete select imbriqués avec plusieurs références
    Par GAlion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/08/2004, 14h06
  5. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05

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