Hibernate version:
3.0
Hello
Si j'ai bien compris (je débute), Hibernate 3 (contrairement à Hibernate 2) considère que par défaut, le lazy-loading sur tous les objets est établi à true, c'est à dire que seul l'identifiant est accessible par défaut, et que pour accéder à des propriétés ou des relations, je dois d'abord les initialiser.
Par exemple, mais je ne sais pas s'il s'agit d'une bonne pratique, mais dans le code je me sers de la méthode size() sur une List, pour initialiser une relation. Je trouve ça légèrement problématique, car ça introduit une certaine dépendance vis à vis d'Hibernate dans le code, en lui faisant "connaitre" une stratégie de chargement liée au lazy-loading, alors que je pense qu'il n'a pas besoin de savoir comment s'adapter à l'ORM.
Comme on peut directement dans le fichier de mapping déclarer quels composants doivent utiliser ou non le lazy-loading, je voudrais savoir si c'est une bonne pratique de décrire uniquement les pratiques de chargement dans le mapping, au lieu de les déclarer dans le code ?
J'ai également une question subsidiare, si des utilisateurs de Spring fréquentent ce forum ;) : Spring propose une servlet, le pattern OpenSessionInViewFilter, positionnée directement en amont de la webapp dans le serveur d'applications, qui a pour but d'ouvrir automatiquement une session pour le chargement si le client, dans la couche de présentation, demande à accéder à des propriétés/relations d'un objet qui sont déclarées comme étant "lazy-loadables". En théorie ça résoud les problèmes de chargement et c'est performant, mais en pratique j'y trouve plusieurs inconvénients : d'abord on perd en quelque sorte le contrôle des stratégies de chargement, puisqu'on laisse le client décider, ensuite si jamais on donne à la couche de présentation un objet en partie initialisé, quand le client initialise une autre partie, et demande ensuite à persister cet objet, Hibernate lance une exception, car il ne sait pas quelle session utiliser pour enregistrer cet objet.
Quelle est la meilleure stratégie ?
Merci si quelqu'un peut m'éclairer :)
|