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 Génération d'un Cross Join


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut JPA Génération d'un Cross Join
    Bonjour,

    J'ai un modèle relativement basique.
    Une personne avec un id, un nom, un prénom, et une entreprise.
    Une entreprise avec un id, un nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CriteriaBuilder queryBuilder = entManager.getCriteriaBuilder();
    CriteriaQuery qdef = queryBuilder.createQuery();
    Root<Personne> personne = qdef.from(Personne.class);
    Fetch<Personne, Entreprise> ent = personne.fetch("entreprise") ;
    qdef.select(personne) ;
    Query query1 = entManager.createQuery(qdef);
    List<Personne> result = query1.getResultList();
    La requête généré fait apparaitre tous les champs de personne et tous les chamsp de entreprise dans le select (normal).
    y'a bien le from Personne, un left outer join sur entreprise,
    mais il me rajoute systèmatiquement un cross join ???
    Pourquoi ?

    D'avance merci de votre aide.
    HadanMarv

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Par défaut
    bon il semble que ce soit à cause de ma clause order by

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdef.orderBy(queryBuilder.asc(personne.get("entreprise").get("nom"), queryBuilder.asc(personne.get("nom"));
    Cette instruction génére le cross join.

    J'ai donc remplacé le Fetch par un Join comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Join<Personne, Entreprise> ent = personne.join("entreprise", JoinType.LEFT);
    et j'ai modifié la clause order by en comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdef.orderBy(queryBuilder.asc(ent .get("nom"), queryBuilder.asc(personne.get("nom"));
    Je n'ai plus le cross join, par contre je n'ai plus les informations de Entreprise sur mon bean Personne.

    J'ai donc remis le fetch tout en laissant le join.
    et de fait j'ai deux fois l'instruction left outer join dans ma requête.
    je ne comprends pas ce qui ne va pas dans mon code.
    D'avance merci de vos lumières.

    HadanMarv

Discussions similaires

  1. [Débutant] Cross Join avec Linq to Dataset
    Par Drakonis dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/07/2012, 10h07
  2. Cross join en Linq
    Par Abdellah2010 dans le forum Linq
    Réponses: 1
    Dernier message: 22/02/2012, 14h13
  3. [JPA][EclipseLink] Requete avec Inner Join
    Par edertef dans le forum JPA
    Réponses: 1
    Dernier message: 20/07/2011, 11h46
  4. Cross join sur la même table
    Par Dylanddd dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2011, 17h27
  5. Akrogen & catalogue génération JPA
    Par azerr dans le forum Akrogen
    Réponses: 0
    Dernier message: 05/07/2007, 02h19

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