Ho problemi a capire quando l'ibernazione colpisce la cache di secondo livello e quando invalida la cache.
Questo è ciò che attualmente capisco:
- La cache di secondo livello memorizza le entità tra le sessioni, l'ambito è SessionFactory
- Devi dire quali entità memorizzare nella cache, nessuna entità verrà memorizzata nella cache per impostazione predefinita
- La cache delle query memorizza i risultati delle query nella cache.
Quello che non capisco è
- Quando l'ibernazione raggiunge questa cache?
- Diciamo che ho impostato la cache di secondo livello ma non la cache delle query. Voglio memorizzare nella cache i miei clienti, ce ne sono 50000. In che modo posso recuperare i clienti dalla cache?
- Presumo di poterli ottenere tramite ID dalla cache. Sarebbe facile ma anche non degno di essere memorizzato nella cache. Ma cosa succede se voglio fare qualche calcolo con tutti i miei clienti. Diciamo che voglio mostrare un elenco dei clienti, quindi come potrei accedervi?
- Come potrei ottenere tutti i miei clienti se la cache delle query è disabilitata?
- Cosa succederebbe se qualcuno aggiornasse uno dei clienti?
- Quel cliente verrebbe invalidato nella cache o tutti i clienti verrebbero invalidati?
O sto pensando che il caching sia totalmente sbagliato? Quali sarebbero gli usi più appropriati della cache di secondo livello in quel caso? La documentazione di ibernazione non è affatto chiara come funziona la cache nella realtà. Ci sono solo le istruzioni su come configurarlo.
Aggiornamento: quindi sono arrivato a capire che la cache di secondo livello (senza cache di query) sarebbe utile per caricare i dati dagli ID. Ad esempio, ho un oggetto utente di cui desidero verificare le autorizzazioni in ogni richiesta in un'applicazione web. Sarebbe un buon caso per ridurre l'accesso al database memorizzando nella cache l'utente nella cache di secondo livello? Come se memorizzassi l'ID utente nella sessione o ovunque e quando ho bisogno di controllare i permessi, caricherò l'utente dal suo ID e controllerei i permessi.