Hibernar el caché de consulta: para los objetos que no se encuentran en el caché de segundo nivel, ¿es riesgoso? ¿útil? ¿mala práctica?

Relacionado con estopregunta

Premisa:

Estas son mis suposiciones, basadas en mi lectura, experiencia y comprensión, pueden estar equivocadas, si lo están, por favor, comenten y editaré la pregunta.

El caché de consultas es bueno principalmente junto con el caché de segundo nivelEl caché de consultas almacena en caché los resultados de los identificadores + parámetrosEl caché de consultas es peligroso si la base de datos se modificó y no se reflejó en el caché

Pregunta:

Tengo un objeto que no está en el caché de segundo nivel. Debido a una mala programación u otras restricciones, el código que carga el objeto se llama varias veces en la misma sesión de hibernación. La recuperación está utilizando una consulta de búsqueda HQL, por ejemplo,

 hibernateTemplate.find("from Foo f where f.bar > ?", bar);

Antes de agregar el caché de consultas, si el código anterior se llamaba N veces dentro de la misma sesión de Hibernate, había N hits en la base de datos

Luego quise ver qué pasa si agrego el caché de consulta:

 Query query = session.createQuery("from Foo f where f.bar > ?");
 query.setCacheable(true);
 query.setParameter(bar);
 query.list();

Cuando agregué el caché de consultas, noté que durante la misma sesión, hibernación ya no golpea la base de datos N veces, solo una vez por sesión.

Así que mi primera suposición es que Hibernate primero busca en la caché de sesión, luego en la caché de segundo nivel. ¿Es esta suposición correcta?También supongo que si el objeto (Foo) que no se encuentra en el caché de segundo nivel, se modificó en la base de datos, luego el caché de consulta, al tener un ámbito de sesión cruzada, devolverá los identificadores incorrectos y, por lo tanto, los objetos incorrectos. ¿Es eso correcto?¿Es seguro decir que usar la caché de consultas para consultas que incluyen información inmutable incluso para objetos en caché que no son 2L, es una buena práctica? (por ejemplo, una consulta que indica que su cláusula where contiene una condición que siempre devolverá los mismos resultados, por ejemplo, "seleccione p.ser_num donde p.id =?" cuando las parejas ser_num e id no cambian una vez que se crean)

Por cierto, en el relacionadopregunta se afirma que el caché de consultas no funciona en el ámbito del caché de sesión. ¿Estoy entendiendo mal esta afirmación, o algo más?

Respuestas a la pregunta(3)

Su respuesta a la pregunta