Bonjour j'avais déjà posté une question sur ce forum qui est la suivante
Il faut dire que je n'arrive pas cerner le fonctionnement d'hibernate la dessus. Alors mes objets finaux (de type C) que je veux charger ont un graphe d'objets assez conséquent et tous ces objets sont mis en mode Fetch = LAZYBonjour je souhaiterais récupérer les données au moment de leur chargement de la BDD et non du cache.
Voilà je m'explique : je viens de me récupérer une application (client lourd) et je suis "Très" débutant en hibernate
j'explique mon cas de figure J'ai un Objet A qui contient une collection d'objets B1, B2, B3, ...etc.
chaque Objet B contient une collection d'objet C1, C2, C3, ...etc.
Les objets C sont des objets complexes (graphe d'obejt assez conséquent collections à deux niveaux).
Tout ca est mappé par hibernate ...
Ce que je cherche a faire c'est au lancement de l'application d'afficher la liste des objets B1 B2 et B3, ...etc., l'utilisateur en désigne un on affiche les objets C qu'il a, puis il choisit d'ouvrir un des objets C1, C2, C3, ...etc. et c'est là que j'ai les problème si entre le moment ou je lance l'application et celui du chargement de l'objet C choisi par l'utilisateur je modifie qq chose sur la base de données directement cette modification n'est pas chargée ... et il charge les données qui sont (si j'ai bien compris) dans le cache.
Comment puis je faire pour pallier à ce problème
Merci d'avance
Donc si j'ai bien compris ils ne seront récupérés depuis la BDD que si on y accède. Voici le test que je fais :
1- Je lance l'application (Ici je fais un currentSession.Load(A.class, id) ;
2- L'application me propose une liste des objets B attaché à A, j'en choisis 1
3- L'application me propose une liste des objets C attaché au B que j'ai choisi
A CE MOMENT LA ET AVANT DE CHARGER L'OBJET C, avec MySQL Query je fais une modif sur l'un des objets qui se trouvent dans la grappe de l'objet C que je vais choisir dans la base
4- Je choisi un Objet C et là le chargement de l'objet C se fait (je fais un Lock aussi currentSession.beginTransaction(), et currentSession.Lock() )
5- juste à ce moment là du chargement, Pour inspecter la validité de mon objet C je parcours presque tous ses champs pour faire plein de tests de cohérence dessus c'est cette partie là qui fait (je pense) que le chargement du graphe d'objets de l'objet C de la BDD se fait (en mode show_sql=true je vois passer les requetes SQL ) et sur MySQL ADMIN je vois le traffic sur la base de données.
MAIS LA BIZARREMENT je ne récupère la valeur que j'ai modifié sur la base de données (en rouge) mais bien la valeur d'avant ... quelqu'un aurait il une idée sur la raison ...
Je sais c'est trop long ... mais bon je voulais être exhaustif même si je sais que j'ai dû oublier quelques détails ...
Merci d'avance pour votre patience (si vous être arrivé jusque là)
Partager