Tengo problemas para entender cuándo la hibernación llega al caché de segundo nivel y cuándo invalida el caché.
Esto es lo que entiendo actualmente:
- El caché de segundo nivel almacena entidades entre sesiones, el alcance es SessionFactory
- Tienes que decir qué entidades almacenar en caché, ninguna entidad se almacenará en caché de forma predeterminada
- La caché de consultas almacena los resultados de las consultas en la caché.
Lo que no entiendo es
- ¿Cuándo llega la hibernación a este caché?
- Digamos que he configurado la caché de segundo nivel pero no la caché de consultas. Quiero almacenar en caché a mis clientes, hay 50000 de ellos. ¿De qué manera puedo recuperar los clientes del caché?
- Supongo que puedo obtenerlos por identificación desde el caché. Eso sería fácil pero tampoco digno de almacenar en caché. Pero, ¿y si quiero hacer algún cálculo con todos mis clientes? Digamos que quiero mostrar una lista de los clientes, ¿cómo puedo acceder a ellos?
- ¿Cómo obtendría todos mis clientes si el almacenamiento en caché de consultas está deshabilitado?
- ¿Qué pasaría si alguien actualizara a uno de los clientes?
- ¿Ese cliente quedaría invalidado en la caché o todos los clientes quedarían invalidados?
¿O estoy pensando que el almacenamiento en caché está totalmente mal? ¿Cuáles serían los usos más apropiados de la caché de segundo nivel en ese caso? La documentación de hibernación no es del todo claro cómo funciona el caché en realidad. Solo hay instrucciones sobre cómo configurarlo.
Actualización: he llegado a comprender que la caché de segundo nivel (sin la caché de consultas) sería buena para cargar datos por id. Por ejemplo, tengo un objeto de usuario que quiero verificar los permisos en cada solicitud en una aplicación web. ¿Sería este un buen caso para reducir el acceso a la base de datos almacenando en caché al usuario en el caché de segundo nivel? Al igual que almacenaría la identificación del usuario en la sesión o en cualquier lugar y cuando necesite verificar los permisos, cargaría el usuario por su identificación y verificaría los permisos.