2

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

我有一个场景,我需要创建新架构 + 将数据从旧架构迁移到新架构。(只有很少的列更改,如删除、长度和类型)

当我尝试使用应用程序插入数据时成功将数据迁移到新模式表后,它会抛出异常

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

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

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

任何帮助将不胜感激:)

4

3 回答 3

3

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

假设 is 的最大行数TBALE_A50标识列的名称是TABLE_ID

ALTER TABLE TBALE_A ALTER COLUMN TABLE_ID
   RESTART WITH 51
于 2013-04-02T10:42:50.993 回答
1

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

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

希望能帮到你:)

于 2013-04-02T10:45:16.320 回答
0

在生成类型 IDENTITY 的情况下,您应该寻找身份列是自动的。@GeneratedValue(strategy = GenerationType.IDENTITY) 要求主键列是自动增量的。

于 2013-04-02T10:44:23.260 回答