Bonjour,
Je souhaitais mettre en place en place une architecture basée sur Hibernate et Spring, et après nombreuses lectures d'articles et de tutoriaux, je me suis lancé.
Mon problème concerne les associations entre les beans. Qu'elles sont les bonnes pratiques pour profiter du lazy-loading en dehors des services.
J'ai pour le moment une DAO (avec hibernate), des services (dont les transactions sont gérées par Spring).
lorsque je souhaite accéder aux propriété des beans qui référencent un autre objet, j'obtient une exception de lazy loading ( et c'est normal ).
Quelles sont les bonnes pratiques? Que les associations soient gérées au niveau des services? Utiliser OpenSessionInView en dehors des services (sachant que je ne travaille pas uniquement dans un contexte web, donc il va falloir que je réécrive un mécanisme proche du OpenSessionInView)?
Je commence à être un peu perdu dans tout cela . Merci de votre aide.
PS :
J'ai essayé d'utiliser le OpenSessionInViewFilter, mais lors de la modification d'objet (update dans la DAO hibernate), je reçoit des exception NonUniqueObjectException).
J'ai mis en place une autre solution qui consiste à renvoyer et à travailler avec des objets différents des beans gérés par hibernate au niveau des services. J'utilise ces objets dans les IHMs. Ils ont pour particularité d'encapsuler le bean et d'avoir une référence vers son service.
Ainsi, lorsque je souhaite faire appel à une propriété lazy, j'invoque une méthode du service dédiée à ce chargement au lieu de passer directement par la propriété du bean qui lèverait une exception Lazy.
Avec cette solution je pensait pouvoir me passer du OpenSessionInViewFilter, mais lorsque je tente d'accéder à l'objet chargé, j'obtient une exception qui dit qu'il n'y a plus de Session.
Si j'active le OpenSessionInViewFilter, tout rentre dans l'ordre. Mais cette solution ne me satisfait pas, car je compte pouvoir utiliser mes services ailleurs que dans une appli web.
Partager