Pregunta

Probablemente se trata de una cuestión de fondo, pero no pudo encontrar la respuesta en cualquier lugar de la web.

Estoy tratando de utilizar una memoria caché de segundo nivel (usando ehcache) y acaba de comprobar que algunos objetos se están recuperando de la base de datos cada vez que trataba de cargarlos, la única diferencia era que yo no estaba recibiendo de ellos por ID, sino por una propiedad que lleva un nombre descriptivo de SEO que se utilizan para crear direcciones URL en el sistema que estoy trabajando. Se JPA / hibernación capaz de recuperar objetos de caché sólo con el identificador del obj? ¿Hay alguna forma para que funcione sin necesidad de activar la caché de consultas?

¿Fue útil?

Solución

  

es JPA / Hibernate capaz de recuperar objetos de caché sólo con el identificador del obj?

Sí, el caché de segundo nivel funciona para consulta que busca un objeto único basado en Id es decir, cuando se utiliza EntityManager.find() o EntityManager.getReference() (o el equivalente y Session#get() Session#load() de la API de Hibernate). Que yo sepa, esto se aplica a todas las implementaciones de JPA.

  

¿Hay alguna forma para que funcione sin necesidad de activar la caché de consultas?

Con la APP norma, no veo ninguna otra opción de utilizar el caché de consultas.

Pero si no les importa usar la API de Hibernate, no podría ser una alternativa con Query#iterate() . Con Query#iterate() , Hibernate emitirá una consulta SQL que traerá sólo los ID y cuando iterar sobre los resultados, se va a cargar las entidades correspondientes de la memoria caché.

Obviamente, Query#iterate() será mucho más lento que Query#list() si usted no está utilizando una caché de segundo nivel.

En lo personal, que haría uso de la caché de consultas.

Ver también

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top