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 :

getCollectionByQuery : problèmes de performance sur jointure)


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut getCollectionByQuery : problèmes de performance sur jointure)
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!-- TABLE : TAB_A -->
    <class-descriptor class="com.his.appli.domain.ClassA" 
    table="TAB_A"> 
    <field-descriptor  name="id" column="TAB_A_ID" jdbc-type="INTEGER" primarykey="true"/>
    <field-descriptor  name="code" column="TAB_A_CODE" jdbc-type="INTEGER"/>
    <field-descriptor name="date"		column="TAB_A_DATE"		jdbc-type="DATE"	conversion="org.apache.ojb.broker.accesslayer.conversions.JavaDate2SqlDateFieldConversion"/>
    ...
    <reference-descriptor name="classB"
    		class-ref="com.his.appli.domain.ClassB" auto-retrieve="true"
    		auto-update="false" auto-delete="false">
    		<foreignkey field-ref="code" />
    		<foreignkey field-ref="date" />
    </reference-descriptor>
    </class-descriptor>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!-- TABLE : TAB_B -->
    <class-descriptor class="com.his.appli.domain.ClassB" table="TAB_B">
    <field-descriptor name="code"           	column="TAB_B_CODE"                   jdbc-type="INTEGER" primarykey="true"/>
    	<field-descriptor name="date"       column="TAB_B_DATE"                  jdbc-type="DATE" primarykey="true" conversion="org.apache.ojb.broker.accesslayer.conversions.JavaDate2SqlDateFieldConversion"/>  	
    ...
    </class-descriptor>

    But de la requête :
    Ramener les objets de type ClassA (cette classe contient donc un objet de type ClassB)

    2 solutions dans mon DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QueryByCriteria query = new QueryByCriteria(ClassA.class, criteria);
    return (Collection<ClassA>) super.getPersistenceBrokerTemplate().getCollectionByQuery(query);
    --> ça dure 6 minutes (6594 éléments)
    ou en dur pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String querySQL = "bla, bla, bla...";
    QueryBySQL query = new QueryBySQL(ClassA.class, querySQL);
    return (Collection<ClassA>) super.getPersistenceBrokerTemplate().getCollectionByQuery(query);
    --> ça dure 9 minutes (6594 éléments)

    Mon problème, c'est que pourtant la même requête que j'ai testé en dur (solution 2) ne prend... que 6 secondes quand je l'exécute sous SQL Developer!! (toujours mes 6594 éléments, ça montre que ça se passe correctement dans tous les cas).

    Je ne comprend pas ce qui ne va pas; quand je trace les requêtes, je vois qu'Hibernate me construit des trucs bizarres, des tas de conditions en cascade de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OR  ((A0.TAB_B_CODE = ?) AND A0.TAB_B_DATE = ?)
    OR  ((A0.TAB_B_CODE = ?) AND A0.TAB_B_DATE = ?)
    OR  ((A0.TAB_B_CODE = ?) AND A0.TAB_B_DATE = ?)
    ...
    mais je n'ai aucune piste.
    Merci aux spécialistes de m'aiguiller...

    PS : au début j'avais juste les champs de la ClassA (sans jointure) et ça allait bien plus vite. C'est donc cette jointure qui me prend du temps (c'est quasiment instantané de me retourner ces 6594 éléments sans les infos supplémentaires récupérées dans la ClassB

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Il a pas beaucoup de succès ce post

Discussions similaires

  1. Réponses: 39
    Dernier message: 21/12/2011, 20h01
  2. problème de performance sur requête avec Tsearch2
    Par Morpheas dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 05/02/2008, 12h25
  3. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 09h11
  4. Réponses: 3
    Dernier message: 20/04/2007, 12h19
  5. Problème de performance sur une "grosse" BD
    Par frechy dans le forum Installation
    Réponses: 9
    Dernier message: 19/09/2005, 16h52

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