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.)