allocationSize
パラメータはINCREMENT BY
と一致する必要があります シーケンスの値。
これは、Hibernateが(データベースから)シーケンスから値を取得し、その値をメモリに保持し、次のX個の後続の識別子(X =layoutSize)を生成して、この値をメモリ内で1ずつインクリメントするように機能します。データベースにアクセスします。
HibernateがX識別子を生成すると、シーケンスから次の値を取得し、新しいX識別子を生成して、その値を1ずつインクリメントします
簡単な例-次のようにしましょう:
-
@SequenceGenerator( ....allocationSize=5 ...)
-
CREATE SEQUENCE .... INCREMENT BY 1 ...
上記の場合、Hibernate:
- シーケンスから最初の数値を取得します-たとえば、
NextVal = 1
そしてそれをメモリに保存します - 次の
allocationSize=5
を生成します 上記の値を1ずつインクリメントする識別子、つまりId = 1, 2, 3, 4, 5
- シーケンスから次の番号を取得します-
INCREMENT BY 1
のため 、nextVal
2
になります - 次の
allocationSize=5
を生成します 上記の値を1ずつインクリメントする識別子、つまりId = 2, 3, 4, 5, 6
ご覧のとおり、重複エラーが発生します。
ここで、このケースを検討してください:
-
@SequenceGenerator( ....allocationSize=5 ...)
-
CREATE SEQUENCE .... INCREMENT BY 5 ...
この場合、Hibernate:
- シーケンスから最初の数値を取得します-たとえば、
NextVal = 1
そしてそれをメモリに保存します - 次の
allocationSize=5
を生成します 上記の値を1ずつインクリメントする識別子、つまりId = 1, 2, 3, 4, 5
- シーケンスから次の番号を取得します-
INCREMENT BY 5
のため 、nextVal
6
になります - 次の
allocationSize=5
を生成します 上記の値を1ずつインクリメントする識別子、つまりId = 6, 7, 8, 9, 10
この場合、重複エラーはありません。
最後のケースには、シーケンスがHibernateの外部で使用される場合、シーケンスによってギャップが生成されるという欠点があります。