-
Merge ineffectif en BDD
Bonsoir,
j'ai un fonctionnement bizarre lorsque je teste la gestion master/slave de mes 2 BDD.
Lorsque j'effectue un merge sur un bean entity sur l'instance master (lecture et écriture) tout est OK l'opération est réalisée.
Par contre lorsque j'effectue un merge sur un bean entity sur l'instance slave (lecture seule) = cas où mon appli a basculée en mode dégradé car indispo, le merge ne retourne pas d'erreur mais cependant rien n'est effectué en BDD !
Un quelconque persist lui retourne bien une erreur comme quoi l'opération n'est pas autorisée (car lecture seule).
Est-ce un fonctionnement normal ?
J'ai cherché ce problème sur le forum et sur le net mais n'ai rien trouvé...
Merci d'avance
-
Bonjour,
Le comportement est étrange. As tu essayé un flush() juste après ton merge ? Je sais que le persist et le merge ne réagissent pas de la même façon sans transaction (ce qui doit être le cas puisque tu es en lecture seule), et l'instruction update ou insert peut etre zapé par un select juste après.
-
Et paf pile la bonne réponse !
En ajoutant un flush() juste après ça fonctionne et en lecture/écriture et en lecture seule.
Je me pose la question tout de même concernant le flush() quand l'appli est en mode lecture/écriture : JPA gère à ce moment là les transactions de manière transparente pour moi ?
Mais le flush() force le passage de la requête c'est bien cela ? Donc la transaction est fermée, la requête passée, pour les requêtes suivantes une nouvelle transaction sera créée automatiquement ?
Au final, en mode lecture/écriture donc avec les transactions, 1 requête = 1 transaction ou alors JPA gère x requêtes = 1 transaction ?
Merci en tout cas pour la réactivité !