2008-09-18 6 views
11

Est-il possible de contourner @GeneratedValue pour un ID dans Hibernate, nous avons un cas où, la plupart du temps, nous voulons l'ID Ajusté au moyen GeneratedValue, mais dans certains cas, voudrions définir l'ID manuellement .Bypass GeneratedValue en veille prolongée

Est-ce possible?

Répondre

5

Je sais que vous pouvez le faire dans la spécification JPA, vous devriez donc pouvoir utiliser Hibernate (en utilisant les annotations JPA +).

Si vous venez de remplir le champ ID du nouveau modèle persistant que vous créez, lorsque vous fusionnez 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. À moins que vous spécifiiez un ID non activé inférieur à la valeur de séquence actuelle, vous obtiendrez un problème une fois que la séquence atteindra la valeur que vous venez d'utiliser. Donc, peut-être que je peux voir où vous pourriez vouloir que l'utilisateur puisse spécifier un ID, mais alors vous devez attraper l'Exception possible (identification de double) qui pourrait venir dans le futur.

+0

Dans mon cas, il n'y aurait pas de doublon, car l'ID serait généré à partir de la même séquence dans les deux cas, juste à différents points de la transaction. –

+1

J'ai un doute à ce sujet, voir des questions comme http://stackoverflow.com/questions/3194721/bypass-generatedvalue-in-hibernate-merge-data-not-in-db et http://stackoverflow.com/questions/2108178/id-generatedvalue-but-set-own-id-valeur. –

+2

Je ne pense pas que ce soit correct non plus. Il ne fonctionne certainement pas en hibernation et j'ai aussi des doutes que cela fonctionnerait avec la plupart des fournisseurs d'APP. – cyberoblivion

Questions connexes