jpa @ SequenceGenerator.allocationSize是什么意思?

时间:2019-02-18 05:55:35

标签: java oracle jpa h2

我在Google上搜索了很多,发现很多人说https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/seq-generator.htmlallocationSize的意思是'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中进行了测试,因此即使将其设置为20,此distributionSize也不起作用,序列的下一个值不会增加20。

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

总而言之,以下面的示例为例。

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

INCREMENT BY 100 缓存30 jpa的分配大小有什么区别。

谢谢。

1 个答案:

答案 0 :(得分:1)

以下是配置值的简短说明:

allocationSize

为了最大程度地减少与数据库服务器的往返行程,请按组分配ID。每个分配中的ID数由distributionSize属性指定。

给定分配中的某些ID可能不会被使用。因此,这种策略不能保证序列值之间不会有间隔。

默认值为50。

INCREMENT BY

指定序列号之间的间隔。

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

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

缓存

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

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

结论

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

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

相关问题