2010-01-07 4 views
3

Lorsque vous exécutez une mise à jour ou une suppression de requête JPQL, Hibernate est-il suffisamment intelligent pour invalider le cache de second niveau de l'entité modifiée?Le cache de second niveau Hibernate est-il invalide lors de l'exécution d'une instruction de mise à jour JPQL?

exemple Contrived:

Vous avez le JPQL:

update Product p set p.status = 'S' where p.name like 'Monitor%' 

Si vous avez actuellement des produits dans le cache de niveau 2 lorsque cette instruction est exécutée, cela signifie que Hibernate invalider tous les produits à partir du cache ou ne il ne fait rien au cache et les produits dans le cache de deuxième niveau sont maintenant invalides?

Juste Pour votre information ... J'utilise JBoss 5.1 avec Hibernate et JBossCache

+0

Intéressant. Je pense que vous pouvez vérifier cela - set showSql = true (ou sinon utiliser JPA, la propriété hibernate pour afficher la sortie sql sur la console), et voir si hibernate récupère à nouveau de la base de données une entité qui vient d'être mise à jour avec hql. – Bozho

+0

Cela vous dirait seulement s'il a rechargé ces éléments dans le cache, ce que je n'imagine pas. Ce qu'il ne vous dirait pas, c'est que s'il invalide le cache, toutes les instances de cette entité devront être rechargées à partir de la base de données. Je suppose que je vais devoir faire un test et découvrir. J'espérais que quelqu'un ici aurait une réponse rapide. – larf311

Répondre

0

Après avoir exécuté mon propre test et en cours d'exécution à travers this bug il semble qu'il invalider le cache de second niveau, pas seulement la deuxième niveau de cache pour les entités impliquées dans la mise à jour.

Questions connexes