La gestion du cache est un sujet vaste et complexe :-)
Tu peux en savoir plus en allant regarder le chapitre qui y est dédié dans la doc :
http://www.hibernate.org/hib_docs/v3/re ... ance-cache
Sinon pour résumer :
- Pour activer le cache il faut que tu ajoutes un tag pour chaque entité que tu veux mettre en cache.
- Lorsque tu mets une entité en cache, tu y mets l'assocation entre un id et une instance. Du coup, lorsque tu fais une requête hql, la requête est effectuée dans la base, hibernate ne fetche que l'id et récupère ensuite l'instance associée dans le cache. Tu gagnes le temps de fetch dans la base qui n'est pas négligeable
- Si tu veux être encore plus "aggressif" au niveau du cache, tu peux mettre en cache des requêtes hql. Hibernate va alors conserver l'association entre la requête et les ids des objets récupérés. Du coup, en association avec le cache de second niveau, tu peux arriver à ne pas invoquer la base lorsque tu fais une requête.
Au vu de ma petite expérience sur le sujet, il est préférable de se limiter au cache des entités dans un premier temps. Si ensuite tu as vraiment un problème de perf particulier tu peux te lancer dans le cache des requêtes mais j'ai l'impression que c'est beaucoup plus sensible.