2008-09-18 17 views
11

Ist es möglich, @GeneratedValue für eine ID in Hibernate zu umgehen, haben wir einen Fall, in dem die ID mit GeneratedValue die meiste Zeit festgelegt werden soll, aber in bestimmten Fällen die ID manuell festlegen möchten .Bypass GeneratedValue im Ruhezustand

Ist das möglich?

Antwort

5

Ich weiß, dass Sie dies in der JPA-Spezifikation tun können, so dass Sie in der Lage sein sollten, Hibernate (mit JPA + -Anmerkungen).

Wenn Sie nur das ID-Feld des neuen persistenten Modells, das Sie erstellen, ausfüllen, wird dieses Modell beim Einfügen in das EntityManager mit der von Ihnen festgelegten ID verwendet.

Dies hat jedoch Auswirkungen. Sie haben diese ID gerade verwendet, aber die in der GeneratedValue-Annotation angegebene Sequenz weiß das nicht. Wenn Sie keine ungewertete ID angeben, die WENIGER ist als der aktuelle Sequenzwert, erhalten Sie ein Problem, sobald die Sequenz den Wert erreicht, den Sie gerade verwendet haben.

So kann ich vielleicht sehen, wo Sie möchten, dass der Benutzer eine ID angeben kann, aber dann müssen Sie die mögliche Ausnahme (doppelte ID) abfangen, die in Zukunft kommen könnte.

+0

In meinem Fall würde es kein Duplikat geben, da die ID in beiden Fällen aus der gleichen Sequenz generiert würde, nur an verschiedenen Punkten der Transaktion. –

+1

Ich habe einen Zweifel darüber, siehe Fragen wie http://stackoverflow.com/questions/3194721/bypass-generatedvalue-in-hibernate-merge-data-not-in-db und http://stackoverflow.com/questions/2108178/id-generatedvalue-but-set-own-ID-Wert. –

+2

Ich glaube nicht, dass das auch richtig ist. Es funktioniert sicherlich nicht im Winterschlaf und ich habe auch Zweifel, dass dies mit den meisten JPA-Anbietern funktionieren würde. – cyberoblivion

Verwandte Themen