2017-01-04 5 views
1

J'ai une requête de mise à jour jdbc qui met à jour une table. Et le cache d'entité est maintenu pour la même table dans Hibernate. J'ai besoin de dire à hibernate d'actualiser la région de cache pour cette entité qui est mise à jour par la requête jdbc.Quel est l'impact d'une requête jdbc sur le cache de second niveau d'hibernation? Puis-je déclencher l'actualisation du cache pour une région de cache spécifique?

+0

Cela devrait vous aider [Comment hibernation assure que le cache de second niveau est mis à jour avec les dernières données dans la base de données] (http://stackoverflow.com/questions/30413321/how-hibernate-ensures-second-level-cache-is-updated -avec-dernière-donnée-dans-base de données) – Tomz

Répondre

2

Vous cherchez

sessionFactory.getCache().evictEntityRegion(MyEntity.class) 

Cela supprime les entrées obsolètes du cache. Cependant, si vous faites cela avant la mise à jour JDBC, dans la fenêtre entre cette invalidation et la mise à jour JDBC, le cache peut être rempli à nouveau par des lectures simultanées, donc si votre application n'arrête pas tous les accès DB, vous pourriez vous retrouver .

Une autre région expulsée après la mise à jour pourrait le trier, mais entre la requête JDBC et l'expulsion de région, vous êtes à nouveau sujet à des données incohérentes dans le cache.