allocationSize
Parameter muss mit INCREMENT BY
übereinstimmen Wert der Sequenz.
Es funktioniert so, dass Hibernate einen Wert aus der Sequenz (aus der Datenbank) erhält und diesen Wert dann im Speicher behält und die nächsten X nachfolgenden Identifikatoren (wobei X=allocationSize) generiert, die diesen Wert um 1 im Speicher erhöhen, ohne Zugriff auf die Datenbank.
Sobald Hibernate X-Identifikatoren generiert, erhält es den nächsten Wert aus der Sequenz und generiert neue X-Identifikatoren, wobei dieser Wert um 1 erhöht wird
Ein einfaches Beispiel - sagen wir so:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
Im obigen Fall Hibernate:
- Holt die erste Zahl aus der Sequenz - sagen wir mal
NextVal = 1
und speichert es im Speicher - Erzeugt die nächste
allocationSize=5
Bezeichner, die den obigen Wert um 1 erhöhen, also:Id = 1, 2, 3, 4, 5
- Holt die nächste Zahl aus der Folge - wegen
INCREMENT BY 1
, dasnextVal
wird sein:2
- Erzeugt die nächste
allocationSize=5
Bezeichner, die den obigen Wert um 1 erhöhen, also:Id = 2, 3, 4, 5, 6
Wie Sie sehen können, wird dies einen doppelten Fehler verursachen.
Betrachten Sie nun bitte diesen Fall:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
In diesem Fall Hibernate:
- Holt die erste Zahl aus der Sequenz - sagen wir mal
NextVal = 1
und speichert es im Speicher - Erzeugt die nächste
allocationSize=5
Bezeichner, die den obigen Wert um 1 erhöhen, also:Id = 1, 2, 3, 4, 5
- Holt die nächste Zahl aus der Folge - wegen
INCREMENT BY 5
, dasnextVal
wird sein:6
- Erzeugt die nächste
allocationSize=5
Bezeichner, die den obigen Wert um 1 erhöhen, also:Id = 6, 7, 8, 9, 10
In diesem Fall gibt es keinen doppelten Fehler.
Der letzte Fall hat den Nachteil, dass wenn die Sequenz außerhalb von Hibernate verwendet wird, die Sequenz Lücken produziert.