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 + multiple cle + jointures


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut requete HQL + multiple cle + jointures
    J'ai à nouveau besoin de votre aide pour une requete plutot complexe.

    J ai 3 tables :
    - Quizz (id, libelle)
    - Candidate (id, libelle)
    - User (id, libelle)
    toutes rattachees par une table
    - QuizzCandidate (quizzId, canId, userId, score)
    qui fait la jonction entre les id des trois autres.

    Ainsi, un QuizzCandidate me permet de trouver quel "Candidate" a fait quel "Quizz" sous la responsabilite de quel "User".

    Ainsi, de facon à alimenter un tableau recapitulatif, j'aimerais effectuer la requete SQL (simplifiee) suivante :

    SELECT CAN.lastName, CAN.firstName, QCA.testDate, QCA.score, QCA.time, QUI.domain, USE.login
    FROM Quizz QUI, Candidate CAN, QuizzCandidate QCA, User USE
    WHERE QUI.id = QCA.quiId
    ANDCAN.id = QCA.canId
    AND USE.id = QCA.useId
    mais voila ! Lorsque j'ai fait mon mapping et apres de tres nombreuses recherches, il m a fallu creer un DAO supplementaire qui se nomme :
    QuizzCandidateId. (oui, y a pas d autres solutions vraiment efficaces pour les clefs multiples). Cela m a donc donné un modele :

    - Quizz (id, libelle)
    - Candidate (id, libelle)
    - User (id, libelle)
    et :
    - QuizzCandidate (quizzCandidateId, score)
    - QuizzCandidateId (quizzId, canId, userId)

    De fait, je pensais que ma requete devait ressembler à :

    SELECT CAN.lastName, CAN.firstName, QCA.testDate, QCA.score, QCA.time, QUI.domain, USE.login
    FROM Quizz QUI, Candidate CAN, QuizzCandidateId QCI, QuizzCandidate QCA, User USE
    WHERE QUI.id = QCI.quiId
    ANDCAN.id = QCI.canId
    AND USE.id = QCI.useId
    Mais lorsque je fais ma requete :

    List result = getHibernateTemplate().find(aQuery);
    j'obtiens l'erreur :

    org.hibernate.hql.ast.QuerySyntaxException - QuizzCandidateId is not mapped
    Effectivemlent, il n'existe aucune table du nom de QuizzCandidateId sinon dans mon modele java ! Mais alors comment faire la liaison entre QuizzCandidate et mes autres tables si je ne peux pas passer par QuizzCandidateId ? J'ai beau chercher sur les forums comment reussir ce tour de passe passe, je trouve pas ^^

    Voila voila, j espere avoir ete clair...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut
    Bon et avec la requete :

    SELECT CAN.lastName, CAN.firstName, QCA.testDate, QCA.score, QCA.time, QUI.domain, USE.login
    FROM
    Quizz QUI, Candidate CAN,
    QuizzCandidate QCA,
    User USE
    WHERE QUI.id = QCA.quiId And CAN.id = QCA.canId And USE.id = QCA.useId
    J'obtiens le message d'erreur :

    org.hibernate.QueryException - could not resolve property: quiId of: com.soft.tec.persistence.model.QuizzCandidate
    Ce qui me parait normal puisque dans mon mapping, quiID n existe plus (puisque la propriete est dans quizzCandidateId)

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Avec le code des classes, ça serait mieux.

    Par contre, vu que tu dis toi même que la propriété n'existe plus, je vois mal où est ton problème ~~

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CAN.lastName, CAN.firstName, QCA.testDate, QCA.score, QCA.time, QUI.domain, USE.login
    FROM
    Quizz QUI, Candidate CAN, QuizzCandidate QCA, User USE
    WHERE QUI.id = QCA.quizzCandidateId.quiId And CAN.id = QCA.quizzCandidateId.canId And USE.id = QCA.quizzCandidateId.useId
    En supposant que les noms de propriétés sont conservées.

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. Jointure requete HQL
    Par red210 dans le forum Hibernate
    Réponses: 15
    Dernier message: 15/10/2007, 17h04
  3. Requete HQL avec jointure
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 50
    Dernier message: 24/04/2007, 15h54
  4. requete normale, imbriquée et jointure
    Par medonline dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/01/2006, 16h01
  5. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03

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