Bonjour à tous !
J'ai un gros souci de performance avec Hibernate.
Pour vous situer un peu le contexte, je dois permettre à un utilisateur de sélectionner un certain nombre de code postaux dans une JTable.
Dans un premier temps je n'avais qu'une seule colonne "code postal" avec juste le numéro du code postal et ça allait très bien niveau performances.
Mais à la réflexion je trouve ce système assez peu pratique pour l'utilisateur puisqu'il ne manipule que des code postaux et qu'il n'a pas le nom des communes avec.
J'ai donc créé une nouvelle table "villes" dans ma base avec toutes les villes des départements gérés par l'application, avec une clé étrangère vers le code postal.
Et c'est là que les performances chutent. La fenêtre met 5s-6s pour s'afficher, ce qui pourrait presque le faire en fait, le souci étant que le scrolling est extrêmement lent et franchement énervant à utiliser, ce qui est compréhensible d'ailleurs puisque la jtable ne récupère que les données qu'elle doit afficher en fonction de la position de la barre de scroll (si besoin) ce qui démarre le lazy-loading.
Si je désactive le lazy-loading j'ai un scroll bien fluide mais là j'explose les temps de chargement.
Si je passe en fetch="join" j'explose les temps de chargement et en plus j'ai 10 fois les mêmes enregistrement dans ma JTable (produit cartésien je suppose).
Heureusement que je n'ai que 200 code postaux et 2000 communes...
Comment pourrai-je faire pour optimiser tout cela ?
Je vous met le mapping d'origine de mes deux classes (CodePostal et Ville) et un petit screenshot pour illustrer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <class name="CodePostal"> <id name="code"> <generator class="assigned"></generator> </id> <set name="villes" inverse="true"> <key column="cp"></key> <one-to-many class="Ville"/> </set> </class>Je vous remercie d'avance pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <class name="Ville"> <id name="id"> <generator class="native"></generator> </id> <property name="nom" type="string" column="ville"></property> <many-to-one name="cp" column="cp"></many-to-one> </class>![]()
Partager