一尘不染

休眠序列会乘以50以生成`@ Id`吗?

hibernate

private static final String SEQUENCE = "my_seq";

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE)
@SequenceGenerator(name = SEQUENCE, sequenceName = SEQUENCE)
private Long titId;

这将创建以下架构:

CREATE SEQUENCE my_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1000
  CACHE 1;

观察:当我将current value序列设置为1时,第一个@Id自动生成的是50。当我将值设置为时1000,第一个ID为50000

于是,不知何故该序列的当前valuze总是得到 成倍50。为什么?如何防止这种情况,而只使用序列中的nexval?


阅读 244

收藏
2020-06-20

共1个答案

一尘不染

此行为来自@SequenceGenerator其参数的默认值50 allocationSize。您可以根据需要进行更改:

@SequenceGenerator(name = SEQUENCE, sequenceName = SEQUENCE, allocationSize = 42)
private Long titId;

这是出于性能原因。它允许Hibernate预订ID块,并防止每次需要新ID时都询问数据库。

2020-06-20