allocationSize
parameter harus cocok dengan INCREMENT BY
nilai urutan.
Ia bekerja sedemikian rupa sehingga Hibernate mendapatkan nilai dari urutan (dari database), dan kemudian menyimpan nilai itu dalam memori dan menghasilkan X berikutnya pengidentifikasi berikutnya (di mana X=allocationSize) menambah nilai ini dengan 1 di memori, tanpa menjangkau database.
Setelah Hibernate menghasilkan pengidentifikasi X, ia mendapatkan nilai berikutnya dari urutan, dan menghasilkan pengidentifikasi X baru, menambah nilai itu sebesar 1
Contoh sederhana - katakanlah:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
Dalam kasus di atas Hibernate:
- Mengambil angka pertama dari urutan - katakanlah
NextVal = 1
dan menyimpannya di memori - Menghasilkan
allocationSize=5
berikutnya pengenal menambah nilai di atas dengan 1, yaitu:Id = 1, 2, 3, 4, 5
- Mengambil angka berikutnya dari urutan - karena
INCREMENT BY 1
,nextVal
akan menjadi:2
- Menghasilkan
allocationSize=5
berikutnya pengenal menambah nilai di atas dengan 1, yaitu:Id = 2, 3, 4, 5, 6
Seperti yang Anda lihat, ini akan menyebabkan kesalahan ganda.
Sekarang tolong pertimbangkan kasus ini:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
Dalam hal ini Hibernasi:
- Mengambil angka pertama dari urutan - katakanlah
NextVal = 1
dan menyimpannya di memori - Menghasilkan
allocationSize=5
berikutnya pengenal menambah nilai di atas dengan 1, yaitu:Id = 1, 2, 3, 4, 5
- Mengambil angka berikutnya dari urutan - karena
INCREMENT BY 5
,nextVal
akan menjadi:6
- Menghasilkan
allocationSize=5
berikutnya pengenal menambah nilai di atas dengan 1, yaitu:Id = 6, 7, 8, 9, 10
Dalam hal ini tidak ada kesalahan duplikat.
Kasus terakhir memiliki kelemahan yaitu jika sequence tersebut digunakan di luar Hibernate, maka sequence tersebut akan menghasilkan gap.