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
。
因此,序列的当前值总是以某种方式乘以 50
。为什么?我怎样才能防止这种情况并仅使用序列中的 nexval?
最佳答案
此行为来自 @SequenceGenerator
,它的参数 allocationSize
的默认值为 50。如果你愿意,你可以改变它:
@SequenceGenerator(name = SEQUENCE, sequenceName = SEQUENCE, allocationSize = 42)
private Long titId;
这是出于性能原因。它允许 Hibernate 预订一个 ID block ,并防止在您每次需要新 ID 时询问数据库。
关于java - 对于 `@Id` 代,Hibernate 序列乘以 50?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989290/