Dúvida com Atualização Externa de Banco de Dados

6 respostas
E

Galera, estou com seguinte problema:

Fiz uma página que lista dados do banco de dados, até aí, tudo bem.
O problema é que se o banco for atualizado manualmente por mim, essa alteração não é refletida na página.

Por exemplo, no banco tenho os dados:

1.Casa
2.Bosa
3.Vida
4.Amigo

Esse resultado aparecem na página.

Se eu mudar 3.Vida para 3.Abacate e atualizar a página,
os dados continuam os mesmos…

Estou usando JPA e já tentei todos os tipos de escopos no meu managedBean

Alguém sabe como resolver isso ?

6 Respostas

dreampeppers99

Talvez tenha haver como voce armazena ou chama esse metodo que monta essa lista. Poste o codigo do mb (ou so parte da propriedade que contem dados para table) bem como o jsf que usa.

E

esse é o código jsf:

<c:forEach items="#{loadPublicacao.dadosPublicacoes}" var="dadosPublicacao">
         <h:ouputText value="#{dadosPublicacao.publicacao.titulo}"/>
</c:forEach>

esse é maneged bean:

@ManagedBean(name = "loadPublicacao")
@ViewScoped
public class CarregadorPublicacao implements Serializable {

    public int a = 0;
    List<DadosPublicacao> dadosPublicacoes;

    public CarregadorPublicacao() {
        EntityManager entityManager = JPAUtil.getEntityManager();
        entityManager.getTransaction().begin();
        PublicacaoDAO publicacaoDAO = new PublicacaoDAO(entityManager);
        dadosPublicacoes = publicacaoDAO.busca();
        entityManager.close();
        System.out.println("valor: " + a);
        a++;
    }

    public List<DadosPublicacao> getDadosPublicacoes() {
        return dadosPublicacoes;
    }
}
dreampeppers99
Tente isso
@ManagedBean(name = "loadPublicacao")
@RequestScoped
public class CarregadorPublicacao implements Serializable {

    public int a = 0;
    List<DadosPublicacao> dadosPublicacoes;

    public CarregadorPublicacao() {
    }

    public List<DadosPublicacao> getDadosPublicacoes() {
         EntityManager entityManager = JPAUtil.getEntityManager();
        entityManager.getTransaction().begin();
        PublicacaoDAO publicacaoDAO = new PublicacaoDAO(entityManager);
        dadosPublicacoes = publicacaoDAO.busca();
        entityManager.close();
        return dadosPublicacoes;
    }
}
E
dreampeppers99:
Tente isso
@ManagedBean(name = "loadPublicacao")
@RequestScoped
public class CarregadorPublicacao implements Serializable {

    public int a = 0;
    List<DadosPublicacao> dadosPublicacoes;

    public CarregadorPublicacao() {
    }

    public List<DadosPublicacao> getDadosPublicacoes() {
         EntityManager entityManager = JPAUtil.getEntityManager();
        entityManager.getTransaction().begin();
        PublicacaoDAO publicacaoDAO = new PublicacaoDAO(entityManager);
        dadosPublicacoes = publicacaoDAO.busca();
        entityManager.close();
        return dadosPublicacoes;
    }
}

Meu código estava exatamente desse jeito, antes, e também não deu certo. Além do mais, coloquei um contador dentro do método "get", e ele era chamado 12 vezes para cada atualização da página. Não sei o porque disso.

dreampeppers99

Cheque para ver se:

Esta usando cache first level ou second level
Veja se esta query que faz essa consulta esta na query.cache

Pode tambem, apos criar o entityManager forcar um flush.

EntityManager entityManager = JPAUtil.getEntityManager(); entityManager.flush(); entityManager.getTransaction().begin(); PublicacaoDAO publicacaoDAO = new PublicacaoDAO(entityManager); dadosPublicacoes = publicacaoDAO.busca();

E

lol

Cara, muito obrigado.

Dei uma olhada nesse lance do cache e consegui resolver o problema.

Estou usando EclipseLink com o JPA e mudei e coloquei a seguinte propriedade no persistence.xml:

<shared-cache-mode>NONE</shared-cache-mode>

Na verdade apenas marquei isso no editor do NetBeans…

Agora está tudo como eu esperava.

Criado 6 de julho de 2011
Ultima resposta 6 de jul. de 2011
Respostas 6
Participantes 2