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 :

choix de stratégies en lazy-loading


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut choix de stratégies en lazy-loading
    Bonjour à tous,

    Encore une énième question sur le chargement lazy dans hibernate...
    J'utilise Hibernate 3.2.5.ga dans une application basé sur un framework type netbeans, eclipse me permettant de partitionner mon application en différents modules.
    Dans mon application, je charge dès le démarrage certaines données primordiales. Une donnée particulière possède une liste d'éléments qui peut facilement dépasser les 10000 éléments. J'ai fait donc fait en sorte que le chargement de ces éléments soit différé en effectant 'extra lazy' .

    Ces données peuvent être visualisées dans un tableau et donc, je souhaite faire en sorte que la tentative de récupération de l'élément à l'index 20 provoque l'éxécution d'une requete permettant de charger l'objet correspondant s'il ne l'est pas déjà.
    Le problème, c'est donc qu'il faut que j'englobe, en gros, les appels aux méthodes : getRowCount, etc... de mon modèle de table dans une session. Tant qu'a faire, si j'ai bien compris, il faut que si la session utilisé est nouvelle, il faut que je réattache mon objet contenant la liste à cette nouvelle session, et idéalement, utiliser la même session ce qui m'évitera tout le processus de réattachement.

    L'application en question est un client lourd, donc j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hibernate.current_session_context_class=thread
    J'ai lu a différents endroits que le couplage d'hibernate avec Spring était souvent la solution à ce genre de problèmes mais j'aimerais en savoir un peu plus sur les points suivants :
    • existe t-il une autre façon de résoudre le problème sans plomber mon modèle de table par la création de session inutile?
    • ne connaissant que très peu spring, existe t-il un tutorial permettant de mieux comprendre comment réaliser ce que je viens de citer?
    • c'est certainement une mauvaise compréhension de ma part mais j'aimerais savoir si lazy="extra" est imcompatible avec l'attribut batch-size? (question idiote ).
    D'autres part, si c'est vraiment vers cette solution que je dois m'orienter, cela signifie que au fur et à mesure que je vais visualiser les éléments de ma table, je risque certainement d'avoir des effets de lenteur (au moins jusqu'à ce que tous les éléments soient chargés ). Y'a t'il une solution à cette conséquence?
    bref, j'aimerais avoir différents avis sur ce genre de problème.

    xixi.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu peux aller voir ce thread, peut-être que tu y trouveras quelque chose:
    http://www.developpez.net/forums/sho...d.php?t=464113

    Pour ce qui est du chargement dans une application Swing, je ne touche pas à la session Hibernate dans mon modèle.
    La sesssion n'est utilisée qu'au sein d'une couche de service qui renvoie les données à afficher.
    Quand j'ai trop de données à afficher, je fais un filtre pour les réduire, car à mon sens, un tableau à 10000 valeurs est inutilisable.
    Je charge uniquement les données qui m'intéressent via des fetch join.
    Dans mon cas, ça me convient.

    Christian Bauer (il me semble), un des membres de l'équipe Hibernate, avait écrit sur son blog, un article intéressant concernant l'utilisation d'Hibernate pour un client lourd. Je vais essayer de retrouver le lien.

  3. #3
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    merci pour les infos. ca serait effectivement intéressant d'avoir le lien vers cette doc hibernate dans un client lourd...

  4. #4
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    Visiblement, va falloir que je me mette a Spring...

    une autre question qui découle de mon problème, si je me débrouille avec spring via de la programmation par aspect, cela signifie que je risque de créer une session à chaque fois même les fois où ce que je chercherai à accéder aura été initialisé précédemment... Y'a t-il un moyen d'éviter ca?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Par défaut
    Un conseil: Spring est un excellent framework pour les personnes qui maîtrisent bien Hibernate, et il est excessivement piégeux pour les autres (et quand je dis piégeux, je suis vraiment gentil).

    Il ne répondra d'ailleurs en rien à ton problème. Une solution efficace qui s'offre est l'uilisation des requête HQL et la pagination pour extraire tes données au moments ou tu en as besoin....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List maListe = session.createQuery("Requete qui fetche les 10000 enregistrements").setFirstResult(X).setMaxResult(20).list()
    Tu incrémentes X au besoin...
    Attention, le comportement de ce type de truc est différent en fonction de ta base de données

  6. #6
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    en fait, la table qui affiche mes éléments gère déjà la pagination graphique...
    est-ce que dans ce cas, utiliser des requête HQL en paginant ne revient pas à initialiser correctement le batch-size sur ma collection et laisser hibernate faire au besoin ?

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

Discussions similaires

  1. spring2 hibernate3 : lazy loading
    Par fxonline dans le forum Hibernate
    Réponses: 9
    Dernier message: 10/02/2007, 18h56
  2. Lazy loading sur component
    Par El Saigneur dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/11/2006, 10h30
  3. Lazy loading et fermeture de session hibernate
    Par BRAUKRIS dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/07/2006, 13h08
  4. [hibernate] problème pour desactiver le lazy loading
    Par agougeon dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/03/2006, 11h20
  5. [HIBERNATE 3]Lazy loading
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 11
    Dernier message: 08/02/2006, 22h40

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