allocationSize
parameter skal matche INCREMENT BY
værdien af sekvensen.
Det fungerer på en sådan måde, at Hibernate får en værdi fra sekvensen (fra databasen), og derefter beholder denne værdi i hukommelsen og genererer næste X efterfølgende identifikatorer (hvor X=allokationsstørrelse) øger denne værdi med 1 i hukommelsen, uden at nå til databasen.
Når først Hibernate genererer X identifikatorer, får den den næste værdi fra sekvensen og genererer nye X identifikatorer, hvilket øger denne værdi med 1
Et simpelt eksempel - lad os sige, at:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
I ovenstående tilfælde Dvale:
- Henter det første tal fra sekvensen - lad os sige
NextVal = 1
og gemmer det i hukommelsen - Genererer næste
allocationSize=5
identifikatorer, der øger ovenstående værdi med 1, dvs.:Id = 1, 2, 3, 4, 5
- Henter det næste tal fra sekvensen - på grund af
INCREMENT BY 1
,nextVal
vil være:2
- Genererer næste
allocationSize=5
identifikatorer, der øger ovenstående værdi med 1, dvs.:Id = 2, 3, 4, 5, 6
Som du kan se, vil det forårsage en dobbelt fejl.
Overvej nu denne sag:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
I dette tilfælde Dvale:
- Henter det første tal fra sekvensen - lad os sige
NextVal = 1
og gemmer det i hukommelsen - Genererer næste
allocationSize=5
identifikatorer, der øger ovenstående værdi med 1, dvs.:Id = 1, 2, 3, 4, 5
- Henter det næste tal fra sekvensen - på grund af
INCREMENT BY 5
,nextVal
vil være:6
- Genererer næste
allocationSize=5
identifikatorer, der øger ovenstående værdi med 1, dvs.:Id = 6, 7, 8, 9, 10
I dette tilfælde er der ingen dubletfejl.
Det sidste tilfælde har den ulempe, at hvis sekvensen bruges uden for Hibernate, vil sekvensen producere huller.