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 :

[Requêtes] [Optimisations] Conseils sur le requêtage et l'optimisation [FAQ]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bouchette63
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut [Requêtes] [Optimisations] Conseils sur le requêtage et l'optimisation
    Bonjour,

    Je me pose plusieurs questions sur Hibernate dont je n'arrive pas à trouver forcément des réponses.
    Même en ayant parcouru la documentation sur le site officiel.

    Tout d'abord, en ce qui concerne l'écriture des requêtes Hibernate. Il existe trois méthodes :
    - HQL
    - SQL natif
    - API Criteria

    1) Existe-t-il un langage à privilégier plus qu'un autre ?

    2) Quels sont les avantages et inconvénients de chacun ?


    Ensuite au niveau de l'optimisation. Hibernate nous offre pas mal de possibilités.

    3) Quels sont les optimisations que vous avez mis en place sous Hibernate ? Et pourquoi ?

    Merci pour votre aide.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Je dirais que le SQL natif n'est à utiliser qu'en cas d'optimisation très pointue.
    On perd la notion d'objet en l'utilisant.

    HQL ou Criteria doit suffire. J'ai une préférence pour HQL mais c'est plus une question d'haibtude.

    Au niveau des optimisations, on peut mettre en place :
    - un pool de connexion autre que celui proposé par défaut
    - le cache de second niveau avec le cache de requêtes
    - des optimisations au niveau base, comme par exemple des "index"

    Voilà un début de réponse.

  3. #3
    Membre éclairé Avatar de bouchette63
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut
    Merci pour ta réponse fr1man,

    Après plusieurs recherches, c'est vrai que le SQL natif n'est pas la méthode pour écrire les requêtes à privilégier. Le HQL et API criteria sont plus souple.
    J'ai vu que HQL était conseillé pour des requêtes statiques tandis que l'API Criteria est conseillé pour des requêtes dynamiques.

    Sinon en ce qui concerne les stratégies de chargement, des personnes ont un avis ? Sur le choix ?

    Merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    A ce que fr1man a cité, j'ajouterai le lazy-loading (qui est activé par défaut) et les batchs. Pour les batchs, je les places au niveau d'une classe (permet de faire des updates en mode batch) et au niveau de collections (permet de charger des associations en batch).

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Grosso modo le HQL doit rester limié à des requêtes relativement simples jointures simple, binaires voire ternaires ensuite ça devient plus chaud pour hibernate et mieux vaut s'orienter vers du SQL natif.

    De même pour tout ce qui est jointures externes un peu tirées par les cheveux ou spécificités de ton SGBD.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Comme dit the-gtm, il est conseillé d'utiliser le lazy loading et utiliser
    l'attribut "fetch" dans les requêtes ou les Criteria quand on a besoin de charger des associations.

    En ce qui concerne les requêtes HQL, je ne suis pas tout à fait d'accord avec sinok. On peut faire des requêtes complexes avec plusieurs jointures et avoir des performances satisfaisantes. Pour moi, le SQL natif ne doit être utilisé qu'en cas de problèmes de perfs ou de fonctionnalités.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimiser une requête ORDER BY sur une table volumineuse
    Par micaz dans le forum Administration
    Réponses: 4
    Dernier message: 19/01/2010, 01h19
  2. [PDO] Conseil sur une requête UPDATE
    Par Tchupacabra dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/10/2009, 09h48
  3. question sur les vues et l'optimisation de requêtes
    Par zaboug dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/03/2009, 16h28
  4. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

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