Question

Il est probablement une question fondamentale, mais n'a pas trouvé la réponse partout dans le web.

Je suis en train d'utiliser un cache de second niveau (à l'aide de ehcache) et juste vérifié que certains objets ont été récupérés à partir de la base de données chaque fois que j'ai essayé de les charger, la seule différence est que je ne les reçoit par id mais par un propriété qui porte un nom convivial SEO qui sont utilisés pour créer des urls sur le système que je travaille. Est JPA / mise en veille prolongée capable de récupérer des objets du cache juste en avec l'identifiant du obj? Est-il possible de le faire fonctionner sans avoir besoin d'activer le cache de requêtes?

Était-ce utile?

La solution

  

est JPA / mise en veille prolongée capable de récupérer des objets du cache juste en avec l'identifiant du obj?

Oui, le cache de second niveau fonctionne pour requête qui recherche un seul objet basé sur Id à savoir lors de l'utilisation EntityManager.find() ou EntityManager.getReference() (ou l'équivalent Session#get() et Session#load() de l'API Hibernate). Autant que je sache, cela s'applique à toutes les implémentations de l'APP.

  

Est-il possible de le faire fonctionner sans avoir besoin d'activer le cache de requêtes?

Avec JPA standard, je ne vois pas d'autre option que d'utiliser le cache de requêtes.

Mais si cela ne vous dérange pas en utilisant l'API Hibernate, il pourrait y avoir une alternative avec Query#iterate() . Avec Query#iterate() , Mise en veille prolongée émettra une requête SQL qui chercher uniquement les cartes d'identité et lorsque vous parcourir les résultats, il charge les entités correspondantes du cache.

De toute évidence, Query#iterate() sera beaucoup plus lent que Query#list() si vous n'êtes pas en utilisant un cache de second niveau.

Personnellement, j'utiliser le cache de requêtes.

Voir aussi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top