Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Flush() - duvida

Boa noite Rodrigo.

Assistindo e realizando o curso até aqui, ficou uma dúvida.

O "flush()" que sincroniza/atualiza o banco de dados, mas ele também faz o "commit" na base? Me refiro, na ausência de se explicitar uma linha com "em.commit()" e fechar a entity manager no final (em.close()) ?

Por exemplo, se eu tivesse apenas o trecho de código abaixo, onde ao final há a instrução "em.flush()" e na sequencia "em.close()", o banco de dados seria sensibilizado com a informação "XPTO 2", "CELULARES" ou nada ? Digo se, após terminar o programa ir na base e abrir a tabela, o que haveria de dado gravado?

        Categoria celulares = new Categoria("CELULARES");

        EntityManager em = JPAUtil.getEntityManager();

        em.getTransaction().begin();

        em.persist(celulares);
        em.flush();

        celulares.setNome("XPTO");
        celulares = em.merge(celulares);

        celulares.setNome("XPTO 2");

        em.flush();
//        em.getTransaction().commit();
        em.close();

Obrigado.

2 respostas
solução!

Olá Adriano, tudo bem? O método flush sincroniza a entidade gerenciada pelo EntityManager com a base de dados, mas não realiza o commit na transação. No seu exemplo, ao chamar em.flush(), você está sincronizando as alterações realizadas na entidade celulares com a base de dados. No entanto, sem o método commit, essas alterações ainda não são commitadas na transação e, portanto, não são permanentes. Se você fechar o EntityManager sem realizar o commit, as alterações serão perdidas. Ou seja, é melhor sempre realizar o commit quando for necessário persistir as alterações na base de dados e não apenas sincronizar com o flush.

Obrigado Otávio!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software