Pergunta

Provavelmente é uma pergunta básica, mas não conseguiu encontrar a resposta em nenhum lugar da web.

Estou tentando usar um cache de segundo nível (usando o ehcache) e verifiquei se alguns objetos estavam sendo recuperados do banco de dados toda vez que eu tentava carregá -los, a única diferença era que não os estava obtendo por id, mas por uma propriedade que carrega Um nome amigável de SEO usado para criar URLs no sistema que estou trabalhando. O JPA/Hibernate é capaz de recuperar objetos do cache apenas com o ID do OBJ? Existe alguma maneira de fazê -lo funcionar sem a necessidade de ativar o cache de consulta?

Foi útil?

Solução

O JPA/Hibernate é capaz de recuperar objetos do cache apenas com o ID do OBJ?

Sim, o cache do segundo nível funciona para a consulta que procura um único objeto baseado em Id ou seja, quando estiver usando EntityManager.find() ou EntityManager.getReference() (ou o equivalente Session#get() e Session#load() da API de hibernato). Afaik, isso se aplica a todas as implementações da JPA.

Existe alguma maneira de fazê -lo funcionar sem a necessidade de ativar o cache de consulta?

Com o JPA padrão, não vejo outra opção além de usar o cache de consulta.

Mas se você não se importa de usar a API de Hibernate, pode haver uma alternativa com Query#iterate(). Com Query#iterate(), O Hibernate emitirá uma consulta SQL que buscará apenas os IDs e, quando você iterar sobre os resultados, ele carregará as entidades correspondentes do cache.

Obviamente, Query#iterate() será muito mais lento do que Query#list() Se você não estiver usando um cache de segundo nível.

Pessoalmente, eu usaria o cache de consulta.

Veja também

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top