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

Exemplo com @DynamicUpdate

Prezados,

Poderiam fornecer um exemplo com @DynamicUpdate?

Criei uma classe e a anotei com @DynamicUpdate. Porém ao criar um objeto e setar o id de um objeto já existente no banco e chamar o em.merge(). A Atualização é executado, porém setando os demais campos para null.

Desde já grato.

5 respostas

Daniel para utilizar o @DynamicUpdate você precisa passar todos os campos no update, imagine que temos:

public class Pessoa {
    private Integer id;
    private String nome;
    private Integer idade;
}

Agora ao chamar um método de editar a pessoa iremos ter um formulário com três inputs(uma para cada campo), se modificarmos apenas o nome e mandar atualizar você pode notar que no update vai estar apenas o nome, porém ainda é preciso passar os outros campos junto no update, o próprio hibernate sabe qual campo foi modificado ou não e fica responsável por acrescentar somente ele no update.

Espero ter ajudado.

Obrigado, Matheus.

Ajudou sim, esse @DynamicUpdate. Então se eu preciso continuar enviando todo o objeto, essa anotação nos serve de que? Melhora a performance ou algo assim?

solução!

Sim você tem que enviar o objeto completo, elas é bem util pos no statement de update só será passado os campos que houveram alteração nos dando uma melhor performance e segurança:

Imagine que alteramos apenas a idade do exemplo anterior que eu lhe dei:

Com @DynamicUpdate

update pessoa set idade = ? where id = ?
`

Sem @DynamicUpdate

update pessoa set id = ?, nome = ?, idade = ? where id = ?

Veja que com @DynamicUpdate garantimos que somente aquele campo alterado será modificado e devido ao falto de passarmos menos campos a execução do mesmo se torna mais rápida, no nosso caso temos apenas 3 campos mas imagine uma tabela com 50 ou 100 campos ? Fazer o update de apenas 1 ou 2 é muito mais rápido e seguro do que atualizar todos os 50 ou 100.

Espero ter ajudado.

Bacana Matheus, obrigado. Abs

De nada Daniel, sempre que precisar não deixe de criar suas dúvidas.

Abraçooos.