Entidade com ID já preenchido: O hibernate faz INSERT ou UPDATE?

1 resposta
A

Tenho uma curiosidade…

Tenho uma classe mapeada para ter seu ID preenchido através de uma sequence de banco.
Se eu criar uma nova instância dessa classe, preencher o ID manualmente e tentar gravar, o hibernate tenta fazer INSERT ou UPDATE?

Obrigado!

1 Resposta

L

Pergunta massa.

Bem, depende de como foi preenchido este id no seu objeto. São duas possibilidades básicas:

1 - Caso você recupere o id através de um método finde/getReference. Ele vai fazer somente um UPDATE;

2 - Caso você crie um novo objeto e mande-o persistir através do merge (se você utilizar persist() não vai funcionar ) ele vai checar no banco se a sua entidade existe, se sim vai fazer um UPDATE se não vai fazer um INSERT.

Para você entender básicamente o por que deste comportamente você deve procurar na internet mais sobre os estados das entidades utilizadas pelo hibernate (transiente, managed, detached e removed). Sugiro começar por esse link:

1 - http://blog.caelum.com.br/entidades-managed-transient-e-detached-no-hibernate-e-jpa/ (vai te dar uma boa ajuda)
2 - http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/objectstate.html (parte mais prática da documentação que passou desapercebido para mim)

Abraços,

Criado 17 de março de 2011
Ultima resposta 17 de mar. de 2011
Respostas 1
Participantes 2