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 :

Jointure : du SQL en HQL


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Jointure : du SQL en HQL
    Bonjour à tous,

    J'ai réussi à avoir les résultats que je souhaite grâce à une requête SQL mais je n'arrive pas à la traduire en HQL.

    Les deux tables concernées sont :
    - T_COMPANY : table des company, les champs sont ID, name
    - T_CONSULTATION : table des historiques, les champs sont companyID, userID

    Ma requete me retourne pour un user donné, toutes les company en affichant le ID, le name et un nouveau champ true si le user a consulte la company correspondante et false sinon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select company.ID, company.name, case when (consult.userID is null) then 'true' else 'false' end as consult
    from T_COMPANY company, T_CONSULTATION consult
    where consult.companyID (+)= company.ID
    and consult.userID (+)= 20
    Par exemple :

    T_COMPANY :
    ID | Name
    ------------
    1 | Avymo
    2 | Orlupo
    3 | Niij

    T_CONSULTATION :
    companyID | userID
    --------------------
    1 | 20
    2 | 30

    Résultats souhaités :

    ID | Name | consult
    --------------------
    1 | Avymo | true
    2 | Orlupo | false
    3 | Niij | false

    Probleme :
    Je ne sais pas traduire le (+) en HQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select company.ID, company.name, case consult.companyID when company.ID then false else true end)
    from Company company, Consult consult
    where consult.userID = :userID
    NB : le userID étant le ID du user connecté

    Avez-vous des idées ?
    Merci pour votre aide.

  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
    Regarde du côté des jointures ouvertes de types left join ou right join.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour fr1man,

    D'abord, merci pour votre réponse.

    J'ai deja regardé les "left join" ou "right join" mais ceci ne fonctionne que si on souhaite faire la jointure entre une classe et son objet (qui est une autre classe).

    Par exemple, si la table T_COMPANY a un champ <engineers> (qui contient toutes les personnes ingénieurs responsable de la company) et la table T_PERSONNE contient toutes les iinformations d'une personne

    Mapping de T_COMPANY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <class name="Company" table="T_COMPANY">
    <id name="ID" column="COMPANY_ID" unsaved-value="null"/>
    <property name="name" column="COMPANY_NAME" />
    <set name="engineers" table="T_PERSONNE" cascade="save-update">
    	<key column="COMPANY_ID" not-null="true" />
    	<many-to-many column="PERSONNE_ID" class="Personne" />
    </set>
    Avec cet exemple, j'aurai pu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select e from Company c left join c.engineers e
    Or dans mon cas, le mapping actuel des tables ne permet pas de faire un left ou right join entre mes deux tables.
    Je dois garder le mapping tel quel, alors il y a-t-il une autre possibilité de faire les jointures ?

Discussions similaires

  1. pb jointure syntax sql
    Par philippe sivy dans le forum Langage SQL
    Réponses: 12
    Dernier message: 21/08/2008, 13h52
  2. Jointure composé SQL 2005
    Par yonialhadeff dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2007, 23h01
  3. Jointures simples SQL
    Par thibaud28 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/12/2006, 23h54
  4. [MySQL] Jointures externes SQL (débutant)
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/08/2006, 13h12
  5. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21

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