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 :

fetch et outer join


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut fetch et outer join
    Bonjour,

    Je m'interroge sur ces 2 options d'hibernate (que l'on peut indiquer dans un mapping de collection ou un mapping many-to-one, one-to-one ...)

    1. Il semble que outer-join existe en hibernate v2 et v3 tandis que fetch n'apparait que dans la v3.

    2. outer-join = true permet d'avoir une jointure et de charger en un seul select plusieurs éléments

    Ex dans le fichier Mother.hbml.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <many-to-one name="child" outer-join="true" lazy="false"/>
    Dans ce cas le chargement de mother et de child va se faire en un seul select. Que se passe t-il si lazy = true ?

    3. fetch. Je ne comprends pas la différence entre fetch = join et outer-join = true. la doc d'hibernate dit
    Par ailleurs, une jointure "fetchée" (rapportée) permet d'initialiser les associations ou collections de valeurs en même temps que leur objet parent, le tout n'utilisant qu'un seul Select. Ceci est particulièrement utile dans le cas des collections. Ce système permet de surcharger les déclarations "lazy" et "outer-join" des fichiers de mapping pour les associations et collections.
    Donc si fetch = join, est ce que outer-join et lazy ne servent à rien ?


    4. On peut déclarer fetch et join dans le mapping mais aussi directement dans la requête. Ex de la doc hibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    from eg.Cat as cat 
        inner join fetch cat.mate
        left join fetch cat.kittens
    Si le mapping et la requête n'ont pas les même "options" qui est prioritaire.

    Merci de m'éclairer sur ce sujet

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    La requête est "prioritaire" sur le mapping.
    Il est donc conseillé de laisser le lazy = true dans le mapping, et de se servir des fetch dans les requêtes (HQL ou Criteria) pour charger la ou les collections dont on a besoin.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    Merci pour cette 1ére réponse.

    C'est deja plus clair mais alors quelle est la différence entre fetch="join" et outer-join="true" ?

    2éme chose quelle est la différence entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from eg.Cat as cat 
        inner join fetch cat.mate
        left join fetch cat.kittens
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from eg.Cat as cat 
        inner join cat.mate
        left join cat.kittens

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    La première requête avec fetch, charger l'objet et la collection sur lesquels l'attribut est appliqué.
    L'objet et la collection ne sont pas chargées dans la deuxième requête.

Discussions similaires

  1. Jointures de type OUTER JOIN
    Par Oluha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 16h11
  2. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08
  3. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 10h54
  4. probleme avec OUTER / OUTER JOIN
    Par Volcomix dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 21/04/2004, 16h57
  5. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28

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