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 :

Requete HQL avec jointure


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut Requete HQL avec jointure
    Bonjour, je souhaiterais effectuer une requete de ce type:

    "SELECT batiment.etage FROM immobilier.Batiment batiment WHERE batiment.etage.libelle =:libelle"

    La structure:
    Un objet Batiment ayant un set "etage" d'objet de type Etage avec une association many-to-many.


    Est ce que quelqu'un pourrait me donner la traduction de ma requete en HQL qui fonctionne ?

    Cordialement,
    Christophe

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Cf http://www.hibernate.org/hib_docs/re.../queryhql.html

    from Batiment as batiment where batiment.etage.libelle='xxx'

    J'ai juste un léger doute à savoir si tu as un batiment qui a deux étages avec le bon libellé s'il te le sort une ou deux fois ... (à mon avis deux)

    Au passage, étrange ta relation many-many j'aurai plutot dit one-to-many (un étage peut "appartenir" à plusieurs bâtiments ??)

  3. #3
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut presque
    en fait effectivement, à la reflection, du many-to-many, c'est très con...
    c'est modifié, j'ai maintenant (merci pour la remarque )
    un set d'etage (one-to-many) dans mon batiment
    un set de piece (one-to-many) toujours dans mon batiment
    un batiment dans ma piece (many-to-one)
    un etage dans ma piece (many-to-onre)
    (histoire de savoir ou la piece "1234342" se trouve sans itterer sur tous les batiments.)

    cependant j'ai l'erreur suivante:
    could not resolve property: etage of: unite.Batiment [FROM unite.Batiment as batiment WHERE batiment.etage.libelle=:libelle]


    ???

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ce qui "compte" c'est le nom de l'attribut Etage dans la classe Batiment, pas le nom de la classe Etage.

    Donc si tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Batiment {
      Etage e;
      ...
    }
    tu dois avoir comme requête :
    from Batiment as batiment where batiment.e.libelle='xxx'

  5. #5
    Membre confirmé
    Avatar de chriscoolletoubibe
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut le problême
    Le soucis, c'est que je n'ai pas qu'un etage dans mes batiments, du coup j'ai pas une reference direct a un objet, mais une collection d'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Batiment {
     
    	/**
             * identifiant non porteur de données.
             */
    	private int id_batiment;
    	private String libelle;
    	private Set etages;
    	private Set pieces;
     
    	public Batiment(){
     
    	}
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /**
             * @hibernate.one-to-many class="fr.gouv.defense.terre.rhc1.unite.Etage"
             * @return Set
             */
    	public Set<Etage> getEtages() {
    		return etages;
    	}
    et donc même en mettant une "s" cela me donne ça:
    net.sf.hibernate.QueryException: could not resolve property: etages of: unite.Batiment [FROM unite.Batiment as batiment WHERE batiment.etages.libelle=:libelle]


    Il y'aurait bien un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select elements(batiment.etages) FROM unite.Batiment as batiment
    mais comment inclure la clause "where"?

    "WHERE batiment.etage.libelle=:libelle "... je pense que ca ne fonctionne pas non plus...

    erf erf erf... suggestion ? parce que ca m'aiderait bien

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Désolé, je suis vraiment à la ramasse aujourd'hui ^^

    Deux possibilités :
    1) Dans ta classe Etage, tu as une référence vers le bâtiment du genre Batiment b
    select batiment from Etage etage inner join etage.b as batiment where etage.libelle='xxx'
    2) Tu n'as pas cette référence.
    Dans ce cas, je pense que le mieux serait :
    select batiment from Batiment as batiment where exists (
    select etage from Etage as etage where etage.libelle='xxx' and etage in elements(batiment.etages)
    )

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

Discussions similaires

  1. Unexpected Token dans requete HQL avec jointures
    Par philoo_le_foo dans le forum Hibernate
    Réponses: 18
    Dernier message: 22/04/2010, 19h48
  2. Requete SQL avec jointure multiple
    Par kissskoool dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/01/2008, 01h07
  3. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31
  4. Requete SELECT avec jointures
    Par escteban dans le forum Requêtes
    Réponses: 10
    Dernier message: 18/04/2007, 12h16
  5. Afficher une requete MYSQL avec jointure
    Par Higestromm dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/12/2005, 15h52

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