Contourner GeneratedValue dans Hibernate
Question
Est-il possible de contourner @GeneratedValue
pour un ID dans Hibernate, nous avons un cas où, la plupart du temps, nous souhaitons que l'ID soit défini à l'aide de GeneratedValue
, mais dans certains cas, souhaiterait définir l'identifiant manuellement.
Est-ce possible de le faire?
La solution
Je sais que vous pouvez le faire dans les spécifications JPA, vous devriez donc pouvoir le faire dans Hibernate (en utilisant des annotations JPA +).
Si vous ne remplissez que le champ ID du nouveau modèle persistant que vous créez, vous devez alors "Fusionner". ce modèle dans EntityManager, il utilisera l'ID que vous avez défini.
Cela a cependant des ramifications. Vous venez d'utiliser cet ID, mais la séquence spécifiée par l'annotation GeneratedValue ne le sait pas. Sauf si vous spécifiez un identifiant non utilisé inférieur à la valeur de la séquence actuelle, vous rencontrerez un problème une fois que la séquence reprend la valeur que vous venez d'utiliser.
Alors, je peux peut-être voir où vous voudriez que l'utilisateur puisse spécifier un identifiant, mais vous devez alors capturer l'éventuelle exception (identifiant en double) qui pourrait survenir à l'avenir.