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 :

Charger un maximum d'objets au démarrage


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut Charger un maximum d'objets au démarrage
    Bonjour,

    Je suis en train de concevoir avec Hibernate Tools un programme qui permet de gérer des patients dans un hopital.
    Les praticiens veulent que sur l'écran d'accueil on est tout les patients qui s'affichent dans un énorme tableau avec toutes les informations importantes.
    Le souci c'est que du coup je cherche tous les patients et à chaque fois que j'en affiche un sur une ligne, je fais chaque ligne une requête pour charger le médecin traitant, une autre pour le prochain RDV, une autre pour le RDV précédent, une autre pour le dernier message associé, etc et j'ai comme ça 10 requêtes par lignes avec des milliers de patients.

    Du coup le chargement est très long, j'ai fait en sorte que l'affichage soit progressif mais il faut quand même attendre longtemps pour que tout s'affiche.
    Je sais d’expérience que ce qui ralentit c'est plus le nombre de requêtes SQL que le contenu de la requête en elle-même
    J'aimerais donc plutôt faire une seule grosse qui charge tout ce que j'ai besoin en mémoire et ensuite utiliser hibernate tools pour accéder à chaque éléments. Autre solution qui me va aussi, je charge l'ensemble de la base de données en mémoire (mais je ne sais pas comment faire).

    J'ai essayé de passer des trucs en lazy mais c'est le même souci, il fait un grand nombre de requêtes et c'est équivalent.
    Comment puis je m'en sortir ?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pas normal que tu fasse 10 requêtes par ligne. Tu devrais être capable de récupérer tes données avec une ou deux requêtes pour l'ensemble du tableau. Maintenant, je suppose que tu fais tout en java avec un "pour chaque patient, calculer ceci, calculer cela, etc). Comme t'es en lazy, ben tu multiplie les requêtes.

    Tu peux utiliser des requêtes HQL pour récupérer les données qui t'intéressent directement.

    Par exemple, si un patient a un médecin traitant, N rendez vous, tu peux récupérer le patient, son médecin et le dernier rendez vous avec une requête HQL dans ce gout là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select p,m,rdv from Patient p left outer join p.medecin as m left outer join p.rendezvous as rdv with rdv.id in (select max(id) from RendezVous rdv where rdv.patient = p)

Discussions similaires

  1. charger puis exposer des objets avec un ORM
    Par maa dans le forum Général Dotnet
    Réponses: 10
    Dernier message: 11/04/2011, 11h58
  2. [AC-2007] Chargement du ruban dans une variable objet au démarrage
    Par lio33 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/02/2011, 09h23
  3. Réponses: 0
    Dernier message: 19/05/2009, 10h58
  4. Charger un graphe d'objets
    Par RogerXXX dans le forum Hibernate
    Réponses: 11
    Dernier message: 15/10/2007, 18h29
  5. [VB.NET][2.0] Changer l'objet de démarrage
    Par Angath dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/06/2006, 09h59

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