如何刷新主键列?

时间:2013-04-02 10:26:33

标签: java sql database db2 hibernate-annotations

直到最近我使用hibernate @Entity 注释来映射到数据库表。所有主键都使用 @GeneratedValue (strategy = GenerationType.IDENTITY)进行注释

我遇到了一个场景,我需要创建新的架构+将数据从旧架构迁移到新架构中。(几乎没有列更改,如drop,length和type)

当我尝试使用Application插入数据时,将数据成功迁移到新的模式表后抛出异常

[ERROR] util.JDBCExceptionReporter DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1; _NewSchema_._TableName_ , DRIVER=3.51.90

我认为应用程序正在尝试再次插入行,主键值从1开始,因为相同的应用程序可以正常使用空表。

我希望插入数据行,其主键值为现有行主键的最高值。

任何帮助都将完整谢谢:)

3 个答案:

答案 0 :(得分:3)

是的,你可以通过改变表来做到这一点。更改表并在DB2中设置标识列的起始索引。

假设TBALE_A的最大行为50,且标识列的名称为TABLE_ID

ALTER TABLE TBALE_A ALTER COLUMN TABLE_ID
   RESTART WITH 51

答案 1 :(得分:1)

您的猜测是正确的,这是我的解决方案,执行以下SQL为ID列指定一个开始位置,然后您的应用程序将正常工作。

alter table TABLE_NAME alter column ID set GENERATED BY DEFAULT RESTART WITH 10000;

希望能帮到你:)。

答案 2 :(得分:0)

如果是生成类型IDENTITY,您应该查找标识列为自动内联。 @GeneratedValue(strategy = GenerationType.IDENTITY)要求主键列为自动增量。