直到最近我使用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开始,因为相同的应用程序可以正常使用空表。
我希望插入数据行,其主键值为现有行主键的最高值。
任何帮助都将完整谢谢:)
答案 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)要求主键列为自动增量。