2010-06-24 7 views
5

problème suivant:Hibernate désactiver cache de requêtes

Je crée une requête pour afficher toutes les entrées d'un MYSQL tableau, si je modifier un champ et exécuter la requête à nouveau, je reçois le même (ancien) Résultat comme dans la première requête .

Il semble que Hibernate met en cache le résultat. J'ai essayé de désactiver caching avec

query.setCachable (false)

"hibernate.cache.use_second_level_cache"

"cache.provider_class"

"org.hibernate.cacheable"

vider et fermer la session

mais rien ne fonctionne

+0

Je ne comprends pas ce que vous avez essayé (il est assez difficile de jeter un tas d'options comme vous l'avez fait). En outre, j'aimerais voir la requête. –

+0

Il s'agit d'une commande Servlet/JSP Page Query query = session.createQuery ("from MyTable"); query.setCacheable (false); Liste bar = query.list(); sur le premier appel je reçois les entrées de la table, puis je édite manuellement certains champs, si j'appelle la fonction à nouveau (par exemple en rafraîchissant/rechargement) je reçois le même résultat qu'avant – Patrick

+0

sauvez-vous l'objet après avoir changé il? Y at-il des transactions impliquées? –

Répondre

4

Je pense que la configuration souhaitée est

hibernate.cache.use_query_cache = false 

Reference.

+0

ne fonctionne pas ... – Patrick

+2

cela implique alors que le cache de requête n'est pas du tout votre problème –

2

Se pourrait-il que vous n'avez jamais enregistré ou mis à jour l'entrée modifiée pour mettre en veille prolongée? Lorsque le cache renvoie un mauvais résultat, ce qui est généralement une indication, quelque chose d'autre est faux.

+0

J'ai changé le champ dans la table manuellement et je l'ai commis aussi – Patrick

+0

Pouvez-vous mettre à jour votre question avec le code, ou au moins les fragments relatifs à l'édition et la mise à jour de l'entrée? –

1

cela n'a rien à voir avec les caches 2nd ou Query, ceux-ci sont déjà désactivés par défaut! Ce qui aiderait probablement dans votre cas est d'appeler session.refresh(yourEntity) afin que l'état de votre entité soit relu par Hibernate.