Je n'ai pas pour habitude de faire de pub sur mon blog pour des articles ou des magazines payants. Mais le dernier Programmez! arrivé dans ma boîte aux lettres a réellement réussi à me captiver le temps d'un article (même en maîtrisant le sujet). "Hibernate, guide de survie" est le titre de cet article, l'oeuvre d'Henri Darmet, que je connais bien et avec qui nous avons évoqué le sujet très récemment lors d'un périple Lyonnais.
Suite:
Le contenu traite des pièges liés à la gestion des entités attachées et détachées dans Hibernate, avec notamment la gestion du merge() et du cascade des entités lorsqu'une partie du graphe objet est dans un mode incohérent avant synchronisation (flush). Qui se traduit souvent par le fameux message "attempted to load into an instance that was already associated with the session". Il n'y a pas un projet Hibernate (moins avec JPA) dans lequel je n'ai vu de développeur s'arracher les cheveux sur ce problème. D'où l'intérêt de maîtriser le comportement d'un outil de mapping. Il ne faut jamais subir les requêtes qui s'affichent dans la console, chacune d'entres elles a un sens et une origine. Un saveOrUpdate() et un merge() bien maitrisé restent la clé du succès.
Cet article met aussi l'accent sur l'intérêt de cascader son mapping (communément appelé "persistance transitive"). La cascade peut aussi avoir des effets pervers, notamment dans le cas de merge() de collections importantes.
Si vous avez 3 euros à dépenser, remplacez le soda de l'après-midi par l'achat en ligne du Programmez! (num 117) de ce mois-ci, vous ne le regretterez pas. Une partie de l'article est également disponible en PDF gratuitement dans le minimag.
Enjoy.
http://wiki.objetdirect.com/wiki/index.php?title=Hibernate_Survival_Guide_Partie_1