Bonjour.
J'ai lu beaucoup de documentation sur Hibernate, et notamment sur les diverses technique de chargement ou également appellé "lazy loading".
J'ai pu lire beaucoup de chose sur les propriétés "lazy", "outer-join", "fecth" ou encore "batch-size" mais là où ca bloque, c'est que je n'ai pas réellement comment et à quel moment utiliser tout celà. Ma question est donc plus sur un principe d'utilisation. J'aimerais si possible que l'on me guide dans le mapping d'un exemple. J'aimerais mapper une base qui associe un fichier à plusieurs messages. A première vue j'ai réalisé un mapping de ce style (les propriétés sont là pour décorés :p) :
Voilà, a partir de cet exemple "bateau" comment définir un paramétrage de chargement correct ? J'aimerais tenir compte de problème de performance et admettons que l'on peut avoir dans un flux, de 1 à 10.000 messages.
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 <class name="Flux" table="FLUX"> <id name="id" column="F_ID" type="string" length="32"> <generator class="uuid"/> </id> <property name="name" column="F_NAME" type="string" length="40" unique="true"/> <property name="dateInsertion" column="F_DATE_INSERT" type="timestamp" update="false"/> <set name="messages" inverse="true"> <key column="MESSAGE_FLUX"/> <one-to-many class="Message"/> </set> </class> <class name="Message" table="MESSAGE"> <id name="id" column="M_ID" type="string" length="32"> <generator class="uuid"/> </id> <property name="etat" column="M_ETAT" type="long" length="1"/> <property name="offset" column="M_OFFSET" type="long"/> <many-to-one name="fluxEntree" class="Flux" column="MESSAGE_FLUX"/> </class>
Mon "idée" de solution :
A priori dans hibernate 3.1 lazy est par défaut à false, donc pas besoin de le mettre. Maintenant je placerait peut être un batch_size sur la liste des messages dans la définition du flux ? Faut il poser un fetch="join" sur le "many-to-one" également ?
Merci d'avance pour toute l'aide que vous pourrez m'apporter
Et n'hésitez pas à partager vos propres exemples, mon but est d'essayer de comprendre le mécanisme des chargements qui me paraît important pour les grosses bases de données.
EDIT : j'ai oublié de préciser que je voulais bien sur eviter les fameux N+1 select
Partager