Quando usar flush() e clear()?

Pessoal, já faz um tempo que ando com uma dúvida sobre JPA. Já procurei em livros (Enterprise Javabeans 3.0 e Hibernate in Action) mas não encontrei nada que me ajudasse. A dúvida é: quando devo utilizar os métodos flush() e clear() do entity manager?

Se precisar desacoplar todas as instâncias de entidade gerenciadas de um contexto de persistência, podemos invocar o método clear() do EntityManager. Ao chamar clear(), todas as alterações feitas nas entidades gerenciadas serão perdidas. É prudente chamar flush() antes de clear() ser invocado, para que não seja perdida nenhuma alteração.
*flush() e FlushModeType
Ao chamar persist(), merge() ou remove(), essas alterações não são sincronizados com o banco de dados até o gerenciador de entidades decidir gravar. Você pode forçar a sincronização a qualquer momento chamando flush(). Por padrão, a atualização acontece automaticamente antes de uma consulta correlacionada ser executada (implementações ineficientes podem até mesmo atualizar antes de qualquer consulta) e em tempo de confirmação de uma transação.

referëncia: http://leurimar.blogspot.com/2008/03/interagindo-com-um-entitymanager.html

2 curtidas

é tipo, flush vai “garantir” o sincronismo com o bd enquanto o clear vai “limpar a memória” do hibernate.

Hum… Agora entendi melhor… Valeu pessoal!