Falta de sincronia entre JPA e DB [RESOLVIDO]

Pessoal, eu faço uma alteração no banco da seguinte forma:

                minhaQuery = minhaEntityManager.createNamedQuery("Objeto.findByCodigo");
                minhaQuery.setParameter("codigo", codigo);
                Objeto objeto = (Objeto) minhaQuery.getSingleResult();

                minhaEntityManager.getTransaction().begin();
                objeto.setQuantidade(quantidadeNova);
                minhaEntityManager.getTransaction().commit();

Quando eu debugo a aplicação, logo após o commit eu vejo que o banco foi alterado.
Logo após eu faço uma consulta:

        consultaQuery = minhaEntityManager.createNativeQuery("SELECT * FROM objeto WHERE codigo = " + codigo, Objeto.class);
        consultaList.clear();
        consultaList.addAll(consultaQuery.getResultList());

Mas o registro é retornado com o valor antigo, mesmo tendo sido alterado no banco.
Eu não uso cache na aplicação, tenho a seguinte configuração no persistense.xml:

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

Minha lista também tem aquele parametro observable marcado.
Eu percebi que se eu chamar o método clear no EntityManager depois do
commit, as alterações são refletidas mas em outros pontos da aplicação
não precisei fazer isso. Uma observação é que estes dados estão sendo
consultados numa view, mas acho que isso não interfere em nada.

Depois de alterar chama o método flush da sua minhaEntityManager.

Chamei flush() mas não atualizou.

tenta colocar o flushMode:

                minhaEntityManager. setFlushMode(FlushModeType.COMMIT); // alteração aqui
                minhaQuery = minhaEntityManager.createNamedQuery("Objeto.findByCodigo");
               
                minhaQuery.setParameter("codigo", codigo);
                Objeto objeto = (Objeto) minhaQuery.getSingleResult();

                minhaEntityManager.getTransaction().begin();
                objeto.setQuantidade(quantidadeNova);
                minhaEntityManager.getTransaction().commit();

Também não deu com o FlushMode mas consegui resolver de outra maneira:

        consultaQuery = minhaEntityManager.createNativeQuery("SELECT * FROM objeto WHERE codigo = " + codigo, Objeto.class); 
        consultaQuery.setHint("javax.persistence.cache.storeMode", "REFRESH");  // Inseri essa linha

De acordo com especificações nesta página: http://en.wikibooks.org/wiki/Java_Persistence/Caching

Ue, você setou “javax.persistence.cache.storeMode” mesmo afirmando que não usa cache? :shock:

Não sei explicar o porque, vou dar uma estudada nos tipos de cache do JPA.