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 :

[JPA][EclipseLink] Requete avec Inner Join


Sujet :

JPA Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut [JPA][EclipseLink] Requete avec Inner Join
    Bonjour,

    Je suis en train de développer un webservice en rest avec des entités généré via sqljdbc venant d'une base SQLServer 2005.

    Jusqu'a maintenant je n'avais pas trop de soucis avec mes requêtes jpql (se limitant à des simples WHERE jusqu'alors) mais là, je bloque complètement.

    Situation :

    J'ai 2 entités qui contiennent ceci :

    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
    @Entity
    @Table(name = "TblServ_Chambre")
    @XmlRootElement
    public class TblServChambre implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @NotNull
        @Column(name = "ServChId")
        private Integer servChId;
        @Column(name = "ServChNumService")
        private Integer servChNumService;
        @Column(name = "ServChNumChambre")
        private Integer servChNumChambre;
    ...
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    @Entity
    @Table(name = "TblService")
    @XmlRootElement
    public class TblService implements Serializable {
     
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @NotNull
        @Column(name = "ServId")
        private Integer servId;
        @Size(max = 50)
        @Column(name = "ServNom")
        private String servNom;
        @Size(max = 50)
        @Column(name = "ServType")
        private String servType;
        @Size(max = 50)
        @Column(name = "ServNomUK")
        private String servNomUK;
        @Size(max = 255)
        @Column(name = "ServText")
        private String servText;
        @Size(max = 255)
        @Column(name = "ServTextUK")
        private String servTextUK;
     
    ...
    Donc en gros, TblService contient tous les services et TblServChambre l'id de la chambre et l'id du service qu'elle propose.

    J'aimerais donc qu'a partir de l'id d'une chambre, je puisse retrouver les services qu'elle propose. Pour cela j'ai commencé à rédiger une requete avec un inner join qui va piocher dans les 2 tables mais je n'y comprend pas grand chose.


    Le plus logique, selon moi, aurai été ça mais ça marche pas (à vrai dire je pense que la syntaxe est mauvaise)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryString = "SELECT s FROM TblService s INNER JOIN TblServChambre t ON s.servId = t.servChNumService WHERE t.servChNumChambre = :id";
    Donc là je m'aventure dans des requêtes bizarres en suivant les exemples trouvés sur le net, mais je n'avance pas.

    J'ai trouvé de la documentation sur ces sites :
    http://download.oracle.com/docs/cd/E...ef_inner_joins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pub FROM Publisher pub LEFT JOIN pub.magazines mag WHERE pub.revenue > 1000000
    ( Pas compris où étais "nommée" la table Magazine... )

    http://www.developpez.net/forums/d10...ette-jointure/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT DISTINCT a FROM Article a JOIN a.genre g WHERE g.idGenre = :genre"
    Le soucis c'est qu'il n'y a pas de clé étrangères dans les tables sur la bdd sqlserver, je pense que ça va faire un carnage si je commence à adapter mes entités avec mes annotation @ManyToOne etc ....

    Vous trouverez ci-joint 2 screen des tables en bases de données si j'ai pas été clair.

    Est-ce que vous avez une piste ou une idée ?

    Je vous remercie d'avance !

    Cordialement, Edertef
    Images attachées Images attachées   

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    Après de nombreux test, j'ai arrêté de chercher compliqué et j'ai fait une simple requete avec WHERE et ça marche ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT s FROM TblService s, TblServChambre t WHERE t.servChNumService = s.servId AND t.servChNumChambre = :servChNumChambre ORDER BY s.servType,s.servNom ASC
    On peux donc considérer ce soucis comme résolu mais par contre, si au détour d'une visite, quelqu'un sait m'expliquer comment les INNER JOIN en JPQL fonctionne, ça m'éviterais de galérer à la prochaine requete.

    Merci !

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

Discussions similaires

  1. Requete avec inner join sur une meme table
    Par mattmax dans le forum Développement
    Réponses: 1
    Dernier message: 15/12/2011, 14h34
  2. [MySQL] structure requete avec inner join
    Par Invité2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2011, 02h34
  3. Requete avec inner join en série
    Par bossLINDROS dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/04/2008, 11h34
  4. Requete avec INNER JOIN
    Par Agité dans le forum Langage SQL
    Réponses: 0
    Dernier message: 05/11/2007, 14h15
  5. Probleme de requete avec Inner join
    Par illight dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2007, 10h22

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