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 :

Difference de perf ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut Difference de perf ?
    Bonsoir

    Il y a t il une difference de Perf entre
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
        /** Entity Manager Factory */
        @PersistenceUnit(name = "myPersistenceUnit")
        private EntityManagerFactory emf;
      EntityManager em = emf.createEntityManager();
     
    //V1 recherche qui ne se fait pas sur la clef primaire, et sous objet pas en LAZY
               infodebut(op, 7);
               StringBuffer select7 = new StringBuffer();
               select7.append("FROM Crit12 as F ");
               select7.append("WHERE F.status = :status");
               select7.append(" AND F.c11a.name = :namea");
               select7.append(" AND F.c11b.name = :nameb");
     
               try {
               Session ses7= ((Session)em.getDelegate());
               org.hibernate.Query query7 = ses7.createQuery(select7.toString());
               query7.setMaxResults(1);
               query7.setParameter("status", "U");
               query7.setParameter("namea","MONNOMTESTC11A_00100");
               query7.setParameter("nameb", "MONNOMTESTC11B_00100");
     
     
               Crit12 tmp=(Crit12)query7.iterate().next();
               ses7.get(Crit12.class, tmp.getId() );
              // return tmp;
              } catch (HibernateException e) {
              //return null;
              }
     
     
     
     
           //V2 Select d'un ID puis un session.get   
              infodebut(op, 8);
              try {
     
     
              StringBuffer select8 = new StringBuffer();
                select8.append("Select F.id FROM Crit12 as F ");
                select8.append("WHERE F.status = :status");
                select8.append(" AND F.c11a.name = :namea");
                select8.append(" AND F.c11b.name = :nameb");
     
     
     
              Session ses8= ((Session)em.getDelegate());
              org.hibernate.Query query8 = ses8.createQuery(select8.toString());
              query8.setMaxResults(1);
              query8.setParameter("status", "U");
              query8.setParameter("namea","MONNOMTESTC11A_00100");
              query8.setParameter("nameb", "MONNOMTESTC11B_00100");
     
              Long tmpid=(Long)query8.list().get(0);
     
             // return (Crit12)ses8.get(Crit12.class, tmpid);
                Crit12 zz=(Crit12)ses8.get(Crit12.class, tmpid);
     
     
              } catch (HibernateException e) {
            //  return null;
              }

    Merci de vos reponses
    Philippe

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Oui il y a une grosse différence. Le fait d'appeler le iterate sur l'objet query fait que Hibernate remonte dans un premier select uniquement les id. Ensuite, une requête est faite à chaque appel de next() pour obtenir l'intégralité de l'objet.

    Dans la deuxième solution l'intégralité du résultat est chargé en même temps via une seule requête.

    La première solution est donc à éviter sauf besoin bien spécifique.

    De manière général il existe une méthode de la query Hibernate (uniqueResult() ) qui permet d'obtenir un seul résultat en retour, ce qui semble plus correspondre à ton problème.

Discussions similaires

  1. Difference de perfs avec Oracle sous Linux et oracle sous Windows
    Par farenheiit dans le forum Administration
    Réponses: 2
    Dernier message: 15/10/2009, 20h26
  2. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  3. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06
  4. Outils linux pour surveiller les perf d'un serveur ?
    Par MASSAKA dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 22/10/2002, 10h40
  5. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

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