Entidade com ID já preenchido: O hibernate faz INSERT ou UPDATE?
1 resposta
A
alissonmn
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?
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: