【问题标题】:What does the jpa @SequenceGenerator.allocationSize mean?jpa @SequenceGenerator.allocationSize 是什么意思?
【发布时间】:2024-04-28 07:50:02
【问题描述】:

我google了很多,发现很多人说allocationSizehttps://www.logicbig.com/tutorials/java-ee-tutorial/jpa/seq-generator.html中的意思是'After 'allocationSize' is reached, the next id will be retrieved from the database sequence again'。

它所指的jpa文件。

The amount to increment by when allocating sequence numbers from the sequence

好像和sql中的'increment by'一样。

哪一个是对的?由于我在h2/jpa中测试,这个allocationSize不起作用,即使设置为20,sequence的下一个值也不会增加20。

我也对 sql 中的“缓存”感到困惑。

综上所述,以下面为例。

CREATE SEQUENCE ITEM_ID_SEQ START WITH 1 INCREMENT BY 100 cache 30;

INCREMENT BY 100cache 30allocationSize of jpa有什么区别。

谢谢。

【问题讨论】:

    标签: java oracle jpa h2


    【解决方案1】:

    这里简单解释一下配置值:

    allocationSize

    为了尽量减少到数据库服务器的往返次数,ID 是按组分配的。每个分配中的 ID 数量由 allocationSize 属性指定。

    可能不会使用给定分配中的某些 ID。因此,此策略并不能保证序列值中不会有空缺。

    默认为 50。

    增量

    指定序列号之间的间隔。

    这个整数值可以是任何正整数或负整数,但不能为0。

    如果该值为负数,则序列下降。如果该值为正,则序列上升。如果省略此子句,则间隔默认为 1。

    缓存

    指定数据库预分配多少序列值并将其保存在内存中以加快访问速度。

    如果发生系统故障,所有未在提交的 DML 语句中使用的缓存序列值都将丢失。丢失值的潜在数量等于 CACHE 参数的值。

    结论

    allocationSize 和 INCREMENT BY 必须具有相同的值。较大的数字会减少数据库往返次数。

    缓存是数据库性能优化,并不适用于所有数据库类型。

    【讨论】: