Olá amigos,
Estou tentando fazer uma consulta usando o javax.persistence.Query, que me retorna uma lista, porém essa lista não com os valores atualizados no banco de dados. Eu tenho um outro sistema legado (que usa JDBC) que grava e altera dados nesse banco, e meu sistema usando JPA lê essas alterações. A alteração feita pelo legado não fica visível ao sistema usando JPA. Somente quando o contêiner é reiniciado que as alterações são vistas pelo sistema usando JPA.
Alguma sugestão?
vc não tem configuração de cache no seu persistence.xml?
com toplink vc pode forçar o sistema buscar sempre os dados quentes do banco, é só usar o setHint. Por exemplo:
Query query =
em.createQuery(ConstantesQueries.MEU_SQL).setHint("toplink.refresh", "true");
não considero uma boa prática… mas pode te ajudar a validar o que pode estar acontecendo.
Qual seria uma boa pratica neste caso ?
Pois acho que grande parte dos sistemas tem a necessidade de trabalhar com dados válidos… quero dizer os que estão guardados no banco.
Desculpe a ignorancia… mas com o uso de cache o sistema visualiza dados que estão na memória, sem considerar as ultimas alterações realizadas no banco por outro usuário ? Isso tem como finalidade dar mais velocidade ?
há situações que trabalhar com cache é de fundamental importância, principalmente qdo nos referimos a requisitos não-funcionais.
Usar ou não cache é um ponto a ser definido pela área de arquitetura de cada sistema, sempre levando em conta a criticidade das informações com relação ao negócio em questão.
Sim… muitas vezes o cache aumenta e muito a performance do sistema… mas em contrapartida ele pode ocultar os dados “quentes” do banco. Por isso, qdo for implementar (ou reutilizar) um modulo de cache, analise muito bem o seu uso e a sua necessidade.
Framework de gerenciamento de cache disponibilizam uma série de recursos que permitem gerenciar a utilização do cache, como por exemplo o tempo de vida do objetos no cache, o o numere de dados armazenados em cache, entre outros.
[quote]Qual seria uma boa pratica neste caso ?
Pois acho que grande parte dos sistemas tem a necessidade de trabalhar com dados válidos… quero dizer os que estão guardados no banco. [/quote]
Acredito que o seu persistence.xml nao esteja configurado adequadamente… por isso o framework de implementação do JPA, no saco o toplink, não esta retornando os dados atualizados do banco.
Usar o setHint deixa a sua aplicação dependente do toplink… caso vc precise mudar um dia para Hibernate, por exemplo, esse hint não funcionará na implementação hibernate.