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

JPA Java Discussion :

JPQL et inner join


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut JPQL et inner join
    Salut,
    j'ai un souci avec une requete en jpql, je sais pas la terminer. Les jointures plantent.

    Je fais un select sur plusieurs tables avec des join, c'est la que le bas blesse, ca plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         select distinct request.number request.revision  
              dir.dirPK.number, dir.dirPK.revision, dir.dirPK.setNum 	
              from Request request
             inner join 
    		Dir dir  where  
              CONCAT (request.revision, request.number)   
              =  
              CONCAT (dir.dirPK.revision,  dir.dirPK.number)    
              and 
              where request.status = :status
    dirPK est une classe annote embedded, elle sert de primary key
    Je pense que je l'ecris pas au bon format

    Merci

  2. #2
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Salut,

    en jpql, tu n'as pas besoin de mettre explicitement la jointure (sauf si c'est un left ou un right join).

    Exemple :

    J'ai une table Client et une table Produit. Supposons qu'un client puisse acheter plusieurs produits. On a donc la propriété List<Produit> produits dans l'entité Client.

    Voici la requête JPQL pour avoir les infos des clients par pays avec un type de produit qu'ils ont acheté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from Client c where c.pays = :pays and c.produits.type = :typeProduit
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Membre très actif Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Par défaut
    déjà dans ta réquête tu as la presence de 2 .
    Ensuite tu dois apprendre à écrire les requêtes JPQL et savoir utiliser la navigation.

    Par exemple là t'as certainement une relation @oneToMany entre request et Dir

    tu peux faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct request.number request.revision  
              dir.dirPK.number, dir.dirPK.revision, dir.dirPK.setNum 	
              from Request request
             join 
    		request.Dir dir
              where request.status = :status
    plus besoin de concat car évidement par la navigation dir.dirPK.revision et request.revision sont liées mais si tu veux une révision particulière tu peux ajouter le paramètre comme avec status en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir.dirPK.revision = :revision
    En maitrisant JPQL les réquètes sont beaucoup plus simplifiés et permet de ne plus avoir la presence des where sur les champs identifiants comme dans le SQL

Discussions similaires

  1. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  2. Nombre de clauses ON dans un INNER JOIN
    Par Shadow aok dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/06/2004, 15h42
  3. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28
  4. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

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