Bom dia a todos. Tenho um sistema que utiliza JPA para acessar um banco de dados MYSQL. Ele é parte de outro sistema muito maior, dessa forma ele busca por determinados dados de acordo com a atualização deles por outros aplicativos (Ou seja, meu entityManager não detém o monopólio do banco). O interessante é que o resultado é sempre o mesmo, independente de o banco já ter sido atualizado com outras informações.
Aqui segue o código que busca os objetos para atualização:
@Override
public List<T> listaAtualizacao(long codigoAtualizacao,int limite,EntityManager em) {
try {
String queryS = "SELECT obj FROM " + oClass.getSimpleName() + " obj";
Query q = null;
if (codigoAtualizacao > 0) {
queryS += " WHERE obj.atualizacao IS NULL OR obj.atualizacao NOT LIKE :cod";
q = em.createQuery(queryS);
if (limite > 0) {
q.setMaxResults(limite);
}
q.setParameter("cod", "%;" + codigoAtualizacao + ";%");
} else {
q = em.createQuery(queryS);
}
List<T> lista = (List<T>) q.getResultList();
em.close();
if (lista != null && lista.size() > 0) System.out.println(queryS + " codparam: " + "%;" + codigoAtualizacao + ";%");
return lista;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
Reparem que eu passo o entityManager para o método. Foi uma tentativa desesperada de toda vez que o método fosse invocado eu forçasse o entityManagerFactory a trabalhar:
public synchronized EntityManager getEntityManager(){
return entityManagerFactory.createEntityManager();
}
O código está dentro de um loop, para que sistema sempre verifique as atualizacoes.
Nada surtiu efeito, o resultado sempre é o mesmo, o programa pode rodar por horas que mesmo após eu apagar todas as linhas da tabela o sistema continua retornado a mesma lista de resultados.
Alguém sabe o que fazer para que o JPA faça o óbvio e retorne uma lista realimente atualizada.
ps: já tente entityManager.clear(), sem efeito.