Cache JPA Hibernate First Level

Olá, primeiramente desculpa se já existir resposta para minha pergunta na comunidade, eu realmente procurei mas não encontrei um tópico respondido enfimm…

Estou fazendo um loop para consultar no banco de dados (Query fixa), e preciso desabilitar o cache do JPA hibernate para que, quando eu altere a tabela direto no banco, a ateração esteja disponível no meu loop que já foi iniciada.

Já tentei


query.setHint(org.hibernate.jpa.QueryHints.HINT_CACHE_MODE, CacheMode.IGNORE);
query.setHint(org.hibernate.jpa.QueryHints.HINT_CACHEABLE, Boolean.FALSE);

factory.getCache().evict(ComponenteBiometrico.class);
factory.getCache().evictAll();

e todos varios outros xmls… mas sem êxito.

Posso estar errado, mas cache de 1° nível não pode ser desabilitado. Algo que se aprende quando se trabalha com ORM/JPA é “não faça alterações diretamente no banco de dados”. O que você pode tentar fazer é usar transação durante cada consulta, assim, após o retorno do banco de dados, faça um commit() ou um flush(), assim talvez consiga atualizar o cache de 1° nível com o que tem no banco de dados.

2 curtidas

Eu particularmente nunca consegui esse feito… Não sei se há como refletir uma alteração de estrutura de seu Banco no JPA sem reiniciar o container ou avisá-lo… O contrário dá tranquilo: alterar uma tabela pelo JPA que reflita no seu BD.
Aliás, também creio que não é seguro isso… Imagina se por uma “falta de sorte” alguém invada seu banco? O sujeito, além de ter acesso ao banco, irá também manipular sua aplicação… Desabilitar os caches do JPA é tirar das maiores vantagens de um framework ORM.

1 curtida