Voilà un article très intéressant d'Alex de l'équipe Terracota. Il aborde la gestion du cache d'Hibernate et les nombreux pièges à éviter.
Pour compléter son analyse, je dirais qu'il est toujours préférable de choisir une stratégie défensive lorsqu'on ne maîtrise pas les conséquences ou le paramétrage d'un cache interne.
Un règle d'or est de réserver la mise en cache de données dont on sait qu'elles seront en lecture seule. Des tables de référence, des nomenclatures ou toute autre donnée modifiée rarement. Les caches de requête peuvent vous faire gagner un temps considérable en performance si la requête en question et ses paramètres sont invariant. Le cas échéant, on risque de s'exposer au effet de bord décrit par Alex sur son blog.
http://tech.puredanger.com/2009/07/10/hibernate-query-cache/
If I were to summarize one piece of advice from this whole article it would be: turn off the query cache unless a) you know why you're turning it on and b) you can measure a real improvement in a realistic load