quarta-feira, 4 de fevereiro de 2009

JPA com JDBC

Quando são inseridos ou modificados dados no banco de dados por outro sistema, ou mesmo na mão diretamente no SGBD, um sistema que usa JPA não reconhece esses dados. Isso porque é usado o cache que foi feito na hora que o entity manager foi criado.

A solução para este problema é usar o "refresh". Encontrei duas formas para isso, a primeira funciona apenas com o TopLink:

A ideia é mandar o dar um refresh na hra da consulta, para isso existe o método setHint da classe Query, onde podem ser passados diversos parâmetros para a consulta, um deles é o refresh, que fica assim:

Query query = em.createQuery(consulta).setHint("toplink.refresh", "true");

outro jeito possível de se fazer eh mandar um refresh no EntityManager, esse funciona tanto para TopLink quanto para Hibernate:

em.refresh();

mas fica mto lento, leva quase o mesmo tempo da hora de inicializar o EntityManager.

Nenhum comentário:

Postar um comentário