2013-02-04 1 views
0

J'ai lu this post. Je ne peux pas obtenir des objets entiers comme suggéré dans cet article. Je reçois MIN, MAX, valeurs de compte. Donc un nouveau message. Voici ce que je veux et ce que j'ai.Cache Hibernate pour les requêtes scalaires

  1. Mon application Spring n'apporte aucune modification à DB (MySQL). Il lit juste les données. Il ne sera pas informé des modifications apportées aux données existantes dans DB.
  2. Toutes mes requêtes renvoient des données scalaires. Pas d'objets entiers. (Ex: Select employee.name,office.address,MIN(employee.rec) from ... where..)

  3. Je veux que mes requêtes soient mises en cache. J'ai donc activé le cache de requêtes dans la configuration d'hibernation. J'ai ajouté cacheable="true" à mes requêtes nommées.

4. J'ai activé le cache de second niveau.

5.Ajout de l'annotation ci-dessous pour la classe de persistance.

@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 

6. Je souhaite actualiser le cache toutes les 24 heures. Donc mis à jour timeToLiveSeconds dans ehcache.xml defaultCache.

Est-ce la bonne approche? Comment savoir si la requête atteint le cache de second niveau à partir du cache de requête? MISE À JOUR: J'ai ajouté des statistiques et il n'y avait pas de hit/miss sur le cache de second niveau.

+0

Il est inutile de faire des entités cacheable, puisque vous ne les retour de vos requêtes. Pour savoir si le cache est activé, activez la journalisation SQL (en définissant la propriété hibernate.show_sql sur true) et vérifiez si les requêtes sont générées ou non. –

+0

Merci @JBNizet. Je suppose que toutes mes autres configurations sont correctes :) – dj8485

Répondre

1

Activez la journalisation SQL et la génération de statistiques. Si vous voyez que la journalisation des requêtes SQL, cela signifie que le cache ne fonctionne pas.

<property name="hibernate.show_sql" value="true"/> 
<property name="hibernate.generate_statistics" value="true"/> 

Pour voir le nombre de succès sur cache de second niveau:

session.getSessionFactory().getStatistics().getSecondLevelCacheHitCount() 
+0

merci pour votre réponse. En ce qui concerne les requêtes scalaires, cela a-t-il un impact sur le cache de second niveau? – dj8485

+0

vous pouvez jeter un oeil à ceci: http://stackoverflow.com/questions/8480268/how-query-cache-works-for-scalar-results – ogzd

+0

Aussi celui-ci, https://forum.hibernate.org /viewtopic.php?f=1&t=941773 – ogzd