Bonjour tout le monde,
Je n’ai pas de problème technique à résoudre à proprement parler, mais je cherche à comprendre, pourquoi j’ai rencontré ce comportement.
Je m’explique: je travaille avec JSF et spring, hibernate et annotation JPA, la session hibernate démarre à « l’entrée » du contrôleur.
J’arrive dans une méthode de mon contrôleur avec un objet détaché de la session, que je cherche à effacer.
1) objet 1 de type B détaché
2) requête HQL par son id, pour supprimer l’objet en base
3) Vérification avec client SQL, la table est bien vidée, je vois aussi la requête sql de suppression dans les log, (j’ai même effectué un flush)
4) Je sors du contrôleur, retour vers la jsp (d’origine)
5) Je retourne dans le contrôleur via la méthode preRender
6) Je descends dans mon dao pour effectué une requête de select, en hql pour récupérer un objet A qui contient une collection d’objet de type B
7) Point d’arrêt dans le dao, pour voir le résultat de la requête
8) Surprise, l’objet 1, du point 1 est remonté par la requête, alors que la table est vide !!?!!
J’ai changé de méthode, plutôt que d’employer des objets garder dans le contrôleur pour éviter les accès en base, je fais un accès en base à chaque fois, même si je peux le retrouver via un fetch, je fais un accès, me frappez pas mais je voulais voir ce qui se passe. Et là tout fonctionne !
Je me permets de faire appel à votre expérience, je suis confronté à un problème de transaction ? de session hibernate ? de session http ? d’un truc que je ne connais pas le nom ?
(comme je ne sais même pas le nom du hic, dur dur de regarder sur internet, ce con de google ne comprend pas la requête « truc qui va pas avec jsf » )
Merci d'avance![]()
Partager