截断表数据后主键不是从1开始

时间:2018-11-15 07:11:09

标签: java jpa spring-data-jpa

我正在使用

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
UserDetails表中的

。但是,一旦我截断了UserDetails表,它就不会从初始开始就开始ID值。我没有在数据库中提供SEQUENCE,但它是按顺序添加的。

3 个答案:

答案 0 :(得分:1)

首先,当您使用@GeneratedValue(strategy = GenerationType.AUTO)注释时,持久性提供程序将根据主键属性的类型确定值。

此类型可以是numericalUUID。对于numeric值(您的情况),世代基于sequence或表generator。因此,主键值在数据库级别上是唯一的。

现在让我们回到您的问题。 您可以做的就是在数据库上找到生成的序列并重新创建它。

答案 1 :(得分:0)

如果您使用AUTO,则如果您使用休眠模式,它将选择strategies之一来生成您的ID。从参考:

  

AUTO-标识列,序列或表,具体取决于   基础数据库

答案 2 :(得分:0)

我添加了

   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DATA")
   @SequenceGenerator(sequenceName = "my_seq", allocationSize = 1, name = "SEQ_DATA")
   private int id;

如果我要截断表,我将使用DROP SEQUENCE SEQ_DATA来DROP序列; 然后,我将再次创建SEQ_DATA。

创建序列SEQ_DATA最小值1最大值999999999999999999999    以1个增量乘以1个缓存20开始;