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

Dúvida na ordem da chamada

Dessa forma funciona a exclusão, gostaria de saber se é boa prática executar assim

Categoria c = new Categoria("celulares");
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
c = em.find(Categoria.class, 1L);
em.remove(c);
em.flush();
em.getTransaction().commit();
em.close();
2 respostas
solução!

Olá Eder!

Nem sempre é preciso forçar um flush depois de remover, depende se ainda vai usar o mesmo contexto ou não e para quê é necessário atualizar o estado atual da base de dados. Como está fechando o entity manager logo na sequência e dando commit, podemos assumir que não esse é o caso nesse exemplo. O flush é utilizado quando você precisa que a alteração tenha efeito imediato na base de dados (também refletida na entidade mapeada), antes de dar um commit.

Além disso, o commit já garante que tudo o que não tenha sido "flushed" seja persistido na base de dados, ou acontecerá um rollback se falhar ao dar commit.

Links úteis: Flush: https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#flush-- Commit: https://docs.oracle.com/javaee/7/api/javax/persistence/EntityTransaction.html#commit--

Entendido