Tenho dificuldade em entender quando o Hibernate atinge o cache de segundo nível e quando invalida o cache.
Isso é o que eu entendo atualmente:
- O cache de segundo nível armazena entidades entre sessões, o escopo é a SessionFactory
- Você tem que dizer quais entidades armazenar em cache, nenhuma entidade será armazenada em cache por padrão
- O cache de consulta armazena resultados de consultas no cache.
O que não entendo é
- Quando a hibernação atinge esse cache?
- Digamos que eu configurei o cache de segundo nível, mas não o cache de consulta. Eu quero armazenar meus clientes em cache, há 50000 deles. De que forma posso recuperar os clientes do cache?
- Presumo que posso obtê-los por id no cache. Isso seria fácil, mas também não vale a pena armazenar em cache. Mas e se eu quiser fazer alguns cálculos com todos os meus clientes. Digamos que eu queira mostrar uma lista dos clientes, então como posso acessá-los?
- Como obteria todos os meus clientes se o cache de consultas estivesse desabilitado?
- O que aconteceria se alguém atualizasse um dos clientes?
- Esse cliente seria invalidado no cache ou todos os clientes seriam invalidados?
Ou estou pensando que o cache é totalmente errado? Quais seriam os usos mais apropriados do cache de segundo nível nesse caso? A documentação do hibernate não deixa claro como o cache funciona na realidade. Existem apenas instruções sobre como configurá-lo.
Update: Então, eu entendi que o cache de segundo nível (sem cache de consulta) seria bom para carregar dados por id's. Por exemplo, tenho um objeto de usuário que desejo verificar se há permissões em cada solicitação em um aplicativo da web. Seria um bom caso para reduzir o acesso ao banco de dados, armazenando o usuário no cache de segundo nível? Como se eu armazenasse a id do usuário na sessão ou onde quer que eu precisasse verificar as permissões, carregaria o usuário por sua id e verificaria as permissões.