JPA - atualizar dados

Na minha camada de persistência, estou utilizando JPA (Toplink), tenho minhas DAOs que estão funcionando.

O meu problema está sendo o seguinte: quando recupero uma informação do banco, o GERENCIADOR começa a trabalhar com os dados que estão em “cache”, porém outra aplicação (DELPHI) acessa os mesmos dados.

Quando faço uma pesquisa, ele faz “cache” destes dados e não volta ao banco, a outra aplicação altera os dados, a minha informação fica desatualizada, pesquisando cheguei até o método EntityManager.refresh(Objeto), este cara resolveu o meu problema nas situações que tenho o retorno simples (getSingleResult) mas nos casos que tenho um ResultList não consegui achar solução.

Este método sempre traz a informação atualizada

public Usuario Pesquisar(String email){
Usuario usuario = null;
String sql = “select u from Usuario u where u.email = '” + email + “’”;
usuario = (Usuario) entityManager.createQuery(sql).getSingleResult();
entityManager.refresh(usuario);
return usuario;
}

Este não

public List Lista(String email)
{
Query query = entityManager.createQuery(“select u from Usuario u where u.email like :email”);
query.setParameter(“email”, “%” + email + “%”);
List usuarios = query.getResultList();
return usuarios;
}

Cara a JPA guarda em cache cada objeto ja consultado de acordo com a PK, e ela não tem nenhum método especificado que faria o refresh de todos os objetos da lista. Uma possível solução seria iterar todos os objetos de sua lista e dar refresh um por um, mas se sua lista retornar um numero grande de objetos a performance de sua aplicação pode cair.

Espero ter ajudado

flwss… :slight_smile:

[quote=lcegatti]Cara a JPA guarda em cache cada objeto ja consultado de acordo com a PK, e ela não tem nenhum método especificado que faria o refresh de todos os objetos da lista. Uma possível solução seria iterar todos os objetos de sua lista e dar refresh um por um, mas se sua lista retornar um numero grande de objetos a performance de sua aplicação pode cair.

Espero ter ajudado

flwss… :slight_smile: [/quote]

Valeu pela resposta, pelo que vi é uma questão de conceito mesmo, ou seja, JPA tem que ter acesso exclusivo a base para evitar isso.