Situation
Ich habe eine Menge von Entitäten (Oracle-Schema), die mittels der Klassen-Annotation @SequenceGenerator
und dann entsprechend der Attribut-Annotation @GeneratedValue
eine Sequenz zugeordnet werden.
Problem
Obwohl sich durch die Log zweifelsfrei zeigen lässt, dass Hibernate die Sequenz abfragt und auch den nächsten Wert enthält, ignoriert Hibernate dies beim eigentlichen Einfügen des neuen Tupels. Stattdessen wird wahlweise irgendeine Integerzahl wie 250, 500 oder auch gerne mal 1412 kollisionsfrei verwendet. Auch den eingebauten ID-Generator mit Zahlen jenseits von 99999 wird gerne verwendet, was dann zu netten “Hey, dass passt doch gar nicht in das Feld rein!"-Fehlern führt.
Lösung
Erst folgende, zusätzliche Einstellung als Eigenschaft für @SequenceGenerator
scheint Hibernate dazu zu bewegen, doch die Sequence zu verwenden: allocationSize 1
. (impliziert so gesehen die Sequenz).
@SequenceGenerator(name = "LOCAL_GENERATOR", sequenceName = "SEQ_NAME", allocationSize = 1)
Dürfte ein Bug sein.
(Nachtrag: Ist kein Bug.)