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!
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,