JPA naum ta refletindo alteração no BD

6 respostas
R

Pessoal em um ambiente web usando uma aplicação com JPA faço um select no banco normal, ai vou direto no banco e altero uma tupla da tabela e depois rodo a aplicação de novo, naum era para a JPA pegar essa alteração naum?
Um colega meu me mostrou isso, então vim testar na minha maquina onde a config é diferente atres de data source com JTA e tal e o funcionamento foi o mesmo.

Alguem saberia dizer pq ela se comporta assim?

6 Respostas

H

Se entendi bem até parece que algum cache está ativando , e a consulta não está
sendo efetuada na segunda vez.

R
Se fizer select no banco aparece a linha nova, se a aplicação for iniciada de novo a alteração é mostrada, e se apos um find vc fizer:

Entidade entidade = entitymanager.find(entidade, id);

entidade = entityManager.refresh(entidade);

a alteração aparece tb, a impressão que da é que com o find ele naum vai no banco sei lá é meio estranha, pensava que seria um caso isolado desse meu colega mais aqui a config e totalmente deferente e se comportou da mesma forma.

Giulliano

Cara não sei qual framework vc esta usando mas o hibernate tem uma sessão onde ele armazena todos os objetos para evitar de ficar indo consultar o banco toda hora…

Num ambiente ideal o usuário nunca teria acesso ao banco de dados a não ser pela aplicação…se vc vai lá na mão e altera vc esta burlando essa idéia…

em todo caso existem métodos da session que resolvem seu caso como session.clean(); session.flush();

ok???

Claudio_Nazzari

Voce precisa fazer um commit no JPA… faz assim:

getEntityManager().getTransaction().begin();

    /* Insira aqui os metodos de persistencias. */

    getEntityManager().getTransaction().commit();

Aonde o getEntityManeger vc substitui pelo seu EntityManager…

R

isso é na hora de um find, naum prescisa comitar, agora seguinte, se ele faz isso alterando a base de dados e naum refletindo, quem me garante que quando outra aplicação alterar o banco ou ate a mesma aplicação em um ambiente distribuido alterara ele ira pegar o certo?

Giulliano

Se vc trabalhar com sistemas distríbuidos não poderá usar essa funcionalidade do hibernate, com certeza.

Porém o hibernate não é um cara engessado tudo nele é configuravel…basta vc procurar na documenteção que tenho certeza q vc irá achar um mode de trabalhar dessa maneira…

Criado 17 de outubro de 2007
Ultima resposta 18 de out. de 2007
Respostas 6
Participantes 4