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 :

API Criteria, charger une jointure, problème bizarre


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut API Criteria, charger une jointure, problème bizarre
    Bonjour

    Je débute avec hibernate, et il m'arrive un truc bizarre.

    J'ai deux tables produit et prix, un produit pouvant avoir plusieurs prix (1-n)

    Je dois faire une requête avec des critères portant à la fois sur le produit et sur le prix.
    Vu le nombre de résultats renvoyés, il serait plus rentable que hibernate récupère les objets prix à partir d'une jointure au lieu de les charger à la demande.

    Quand je précise juste les critères sur le produit, il n'y a aucun problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Criteria productCriteria=session.createCriteria(Product.class);
    productCriteria.add(Restrictions.ilike("name", "%"+keyword+"%"));
    productCriteria.setFetchMode("prices", FetchMode.JOIN);
    Il y a bien une jointure avec price dans la requête générée, et lorsque je parcours mes résultats, j'ai bien accès à la propriété prices de product sans requête supplémentaire.

    Imaginons que j'ose rajouter un critère sur le prix, comme là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Criteria productCriteria=session.createCriteria(Product.class);
    productCriteria.add(Restrictions.ilike("name", "%"+keyword+"%"));
    productCriteria.setFetchMode("prices", FetchMode.JOIN);
    Criteria priceCriteria=productCriteria.createCriteria("prices", JoinFragment.INNER_JOIN);
    priceCriteria.add(Restrictions.gt("priceQuantity", 100));
    Dans ce cas, la requête généréee comporte également une jointure avec price, mais lorsque je parcours les prix contenus dans la propriété prices de mes objets product, il me fait une requête à chaque fois que j'accède aux propriétés d'un des objet price.

    J'utilise hibernate 3.2

    Mapping de product :
    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
     
    <class name="dto.Product" table="product">
    	<id name="id" column="id">
    		<generator class="sequence"> 
    			<param name="sequence">product_id_seq</param> 
    		</generator>
    	</id>
    	<set name="prices" inverse="true">
    		<key column="product_id"/>
    		<one-to-many class="dto.Price"/>
    	</set>
    	<property name="name" column="name"/>
    	<property name="smallBoxQuantity" column="small_box_quantity"/>
    	<property name="largeBoxQuantity" column="large_box_quantity"/>
    </class>
    Quelqu'un a-t'il une idée ?

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bon je me répond à moi-même, en espérant que ca serve à d'autres :
    changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <set name="prices" inverse="true">
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <set name="prices" inverse="true" lazy="false" fetch="subselect">
    Résoud le problème

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut API Criteria, charger une jointure
    Bonjour

    Je débute avec hibernate,
    J'ai deux tables:
    * crédit (colon : solde_crédit, client , code_agence,......... )
    * region(colon : lib_region, code_agence , .....................)
    une region pouvant avoir plusieurs agences (1-n)

    Je dois faire une requête avec des critères ( pour liste la somme des soldes des crédits par region.
    Quelqu'un a-t'il une idée ?

Discussions similaires

  1. [Hibernate 3] [Criteria] Faire une jointure avec Criteria
    Par bouchette63 dans le forum Hibernate
    Réponses: 30
    Dernier message: 07/06/2010, 17h54
  2. Réponses: 7
    Dernier message: 01/05/2007, 21h46
  3. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59
  4. [TP] Problème bizarre avec une boucle
    Par Dunk dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 10/12/2006, 14h06
  5. Débutant SQL, problème sur une jointure censée exclure ??
    Par derfatypik dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/06/2005, 15h55

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