allocationSize
il parametro deve corrispondere a INCREMENT BY
valore della sequenza.
Funziona in modo tale che Hibernate ottenga un valore dalla sequenza (dal database), quindi mantenga quel valore in memoria e generi i successivi X identificatori successivi (dove X=allocationSize) incrementando questo valore di 1 nella memoria, senza raggiungendo il database.
Una volta che Hibernate genera identificatori X, ottiene il valore successivo dalla sequenza e genera nuovi identificatori X, incrementando quel valore di 1
Un semplice esempio - diciamo che:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
Nel caso precedente, ibernazione:
- Recupera il primo numero dalla sequenza - diciamo
NextVal = 1
e lo salva in memoria - Genera
allocationSize=5
successivo identificatori incrementando di 1 il valore sopra, ovvero:Id = 1, 2, 3, 4, 5
- Recupera il numero successivo dalla sequenza - a causa di
INCREMENT BY 1
, ilnextVal
sarà:2
- Genera
allocationSize=5
successivo identificatori incrementando di 1 il valore sopra, ovvero:Id = 2, 3, 4, 5, 6
Come puoi vedere, causerà un doppio errore.
Ora, per favore, considera questo caso:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
In questo caso ibernazione:
- Recupera il primo numero dalla sequenza - diciamo
NextVal = 1
e lo salva in memoria - Genera
allocationSize=5
successivo identificatori incrementando di 1 il valore sopra, ovvero:Id = 1, 2, 3, 4, 5
- Recupera il numero successivo dalla sequenza - a causa di
INCREMENT BY 5
, ilnextVal
sarà:6
- Genera
allocationSize=5
successivo identificatori incrementando di 1 il valore sopra, ovvero:Id = 6, 7, 8, 9, 10
In questo caso non ci sono errori duplicati.
L'ultimo caso presenta lo svantaggio che se la sequenza viene utilizzata al di fuori di Hibernate, la sequenza produrrà delle lacune.