Hormis les valeurs générées par la base de données, il n'est évidemment pas nécessaire qu'Hibernate renvoie l'instance mise à jour car l'objet est passé à Session.saveOrUpdate()
est l'instance mise à jour. Les valeurs générées par la base de données (séquence, déclencheur, valeurs par défaut, etc.) seront définies après Session.saveOrUpdate
s'ils sont annotés en conséquence (ou définis dans un fichier de mappage XML).
Pour valeurs d'identifiant
utilisez le JPA @javax.persistence.GeneratedValue
annotation en conjonction avec le JPA @javax.persistence.Id
annotation. Pour propriétés simples utiliser le natif Hibernate @org.hibernate.annotations.Generated
annotation (autant que je sache, il n'y a pas d'annotation JPA correspondante).
La manière dont les valeurs d'identifiant générées sont récupérées par Hibernate dépend de la stratégie de génération et/ou du dialecte de la base de données. Pour les propriétés simples, Hibernate exécute un SELECT
supplémentaire par instruction id après le INSERT
ou UPDATE
.