-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: SQL généré pour les collections non optimal
PostPosted: Wed Feb 01, 2006 10:08 am 
Newbie

Joined: Tue Jan 17, 2006 6:09 am
Posts: 15
Bonjour,

Je vais prendre l'exemple d'une table 'CAT' liée à une table 'KITTEN' (une relation 1 à n).

Dans la classe Cat, j'ai la méthode getKitten() qui permet de récupérer une collection de Kitten.

J'ai dans mon fichier de configuration XML :
Code:
   <set
        name="utilGroupes"
        [b]lazy="false"[/b]
        inverse="true"
    >
        <key>
            <column name="CAT_R" />
        </key>
        <one-to-many
            class="Kitten"
        />
    </set>


Mon interrogation est celle-ci : si je veux récupérer la liste de tous les chats (supposons qu'il y en a 1000), je vais avoir une requête SQL comme ça :
select * from CAT
et 1000 requêtes de ce style :
select * from KITTEN where CAT_R = ?

1001 requêtes, c'est énorme alors qu'en SQL natif j'aurais fait simple :
select * from CAT as cat, KITTEN as kitten where kitten.CAT_R = cat.CAT.ID
et le trafic réseau et le nombre de connections à la BD en est considérablement allégé

Comment parvenir à résoudre ce problème? Y a t'il une solution?

PS : j'ai bien essayé de faire en HQL :
select cat from CAT as cat left join cat.kitten as kitten
mais ça ne fonctionne pas comme espéré

Merci pour vos éclaircissements


Top
 Profile  
 
 Post subject: Associations et jointures
PostPosted: Wed Feb 01, 2006 11:20 am 
Newbie

Joined: Wed Feb 01, 2006 6:49 am
Posts: 5
En Hibernate 3.x, il faut utiliser la clause fetch pour forcer la lecture.
from Cat as cat svc left join fetch cat.kittens

Ou bien définir fetch="join" au niveau de l'association.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 01, 2006 11:30 am 
Newbie

Joined: Tue Jan 17, 2006 6:09 am
Posts: 15
Je suis en Hibernate 2 mais si le fait de passer en V3 permet de résoudre le problème que j'évoquais, je suis pret à changer de version


Top
 Profile  
 
 Post subject: Associations et jointures
PostPosted: Wed Feb 01, 2006 12:07 pm 
Newbie

Joined: Wed Feb 01, 2006 6:49 am
Posts: 5
Le mot clé fetch existe aussi en Hibernate 2, donc
Code:
from Cat as cat left join fetch cat.kittens

est valide.

Pour le paramètrage au niveau association, il faut utiliser outer-join et lazy sur la classe associée.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.