Atualização de dados diretamente no BD não reflete na aplicação [RESOLVIDO]
6 respostas
J
jmozer
Pessoal, tenho um sistema rodando em um servidor, esse sistema fica esperando receber conexões via socket para autorizar vendas, hoje notei que quando altero diretamente no banco de dados um campo chamado status da tabela de estabelecimentos alterando de inativo para ativo o meu sistema em java (utilizando Toplink) só reflete essa alteração se eu fechar e executar novamente, alguém tem uma solução pra isso?
Pessoal… continuo com o mesmo problema… alguém tem alguma idéia?
mvargens
Existem niveis de cache quando se usa hibernate e toplink. O problema deve ser esse.
Ele faz uma cache quando consulta os dados. Quando vc da update ele modifica a cache gerada na consulta e atualiza o banco.
seguindo essa ordem vc tem os mesmos dados tanto na cache quanto no banco.
Agora vc foi la e mudou no banco sem mudar na cache vai ficar diferente mesmo.
Dai tem que ver que nivel de cache vc está usando.
Marky.Vasconcelos
A solução para esse problema é retira-los do cache e fazer o Toplink carregar novamente.
Nunca usei Toplink mas com hibernate eu uso o
session.evict(objetoPareRetirarDaSessao);
Assima proxima vez que for utiliza-lo ele vai recarregar do banco.
J
jmozer
mvargens:
Existem niveis de cache quando se usa hibernate e toplink. O problema deve ser esse.
Ele faz uma cache quando consulta os dados. Quando vc da update ele modifica a cache gerada na consulta e atualiza o banco.
seguindo essa ordem vc tem os mesmos dados tanto na cache quanto no banco.
Agora vc foi la e mudou no banco sem mudar na cache vai ficar diferente mesmo.
Dai tem que ver que nivel de cache vc está usando.
Obrigado pela dica, acredito que seja exatamente esse o problema mesmo, mas como eu consigo identificar o nível de cache que o TopLink está utilizando? Não me lembro de ter definido isso em lugar algum, usei o NetBeans 6.1 pra desensenvolver esse aplicativo.
Obrigado.
J
jmozer
Mark_Ameba:
A solução para esse problema é retira-los do cache e fazer o Toplink carregar novamente.
Nunca usei Toplink mas com hibernate eu uso o
session.evict(objetoPareRetirarDaSessao);
Assima proxima vez que for utiliza-lo ele vai recarregar do banco.