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 :

Optimisation des query dans le cas d'un @joinColumn


Sujet :

JPA Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Optimisation des query dans le cas d'un @joinColumn
    Salut,

    Considerons deux Tables associées à l'aide d'un @joinColumn:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Entity
    public class Provider implements java.io.Serializable,{
        @Id
        @GeneratedValue
        protected int id;
        protected String status;
     
        @OneToOne(cascade=CascadeType.ALL)
        @JoinColumn(name="fk_contact")
        protected Contact contact;
    ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    public class Contact implements java.io.Serializable{
        @Id
        @GeneratedValue
        protected int id;
        protected String address;
        protected String locale;
    ...
    }
    Lors de select suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    entityManager.createQuery("select c from Provider C order by c.name").getResultList();
    j'obtient en SQl 1 select Provider + 1 select Contact par objet Provider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Hibernate: select provider0_.id as id10_, provider0_.fk_contact as fk5_10_, provider0_.name as name10_, provider0_.pref_logo_size as pref3_10_, provid
    er0_.status as status10_ from Provider provider0_ order by provider0_.name
    Hibernate: select contact0_.id as id4_0_, contact0_.address as address4_0_, contact0_.email as email4_0_, contact0_.given_name as given4_4_0_, contact
    0_.locale as locale4_0_, contact0_.sur_name as sur6_4_0_, contact0_.telephone as telephone4_0_ from Contact contact0_ where contact0_.id=?
    Hibernate: select contact0_.id as id4_0_, contact0_.address as address4_0_, contact0_.email as email4_0_, contact0_.given_name as given4_4_0_, contact
    0_.locale as locale4_0_, contact0_.sur_name as sur6_4_0_, contact0_.telephone as telephone4_0_ from Contact contact0_ where contact0_.id=?
    Hibernate: select contact0_.id as id4_0_, contact0_.address as address4_0_, contact0_.email as email4_0_, contact0_.given_name as given4_4_0_, contact
    0_.locale as locale4_0_, contact0_.sur_name as sur6_4_0_, contact0_.telephone as telephone4_0_ from Contact contact0_ where contact0_.id=?
    Hibernate: select contact0_.id as id4_0_, contact0_.address as address4_0_, contact0_.email as email4_0_, contact0_.given_name as given4_4_0_, contact
    0_.locale as locale4_0_, contact0_.sur_name as sur6_4_0_, contact0_.telephone as telephone4_0_ from Contact contact0_ where contact0_.id=?
    Ne peut-on pas améliorer cela?

    Merci pour vos réponse!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Normalement Hibernate peut charger 2 objets en un select à l'aide d'une jointure.

    Essaye de rajouter à ton mapping : fetch=join & lazy=false.

  3. #3
    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
    Plutôt que de le faire sur le mapping, il est préférable de le faire dans la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select p from Provider p inner join fetch p.contact order by p.name

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup pour votre aide!

    J'ai pris la solution de fr1man qui marche très bien!

Discussions similaires

  1. Modélisation et optimisation des décisions dans la conception de jeux
    Par dourouc05 dans le forum Création de jeux vidéo
    Réponses: 6
    Dernier message: 15/09/2015, 21h26
  2. Portée des variables dans le cas particulier de création PDF
    Par jmdel5327 dans le forum Développement Web en Java
    Réponses: 10
    Dernier message: 14/12/2013, 18h42
  3. Réponses: 15
    Dernier message: 31/10/2012, 17h32
  4. [SP-2010] Croix rouges à la place des images, dans certains cas.
    Par sebfreu dans le forum SharePoint
    Réponses: 5
    Dernier message: 26/03/2012, 13h01

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