【问题标题】:How can i refresh my primary key column?如何刷新我的主键列?
【发布时间】:2013-04-02 10:26:32
【问题描述】:

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

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

当我尝试使用应用程序插入数据时成功将数据迁移到新架构表后,它会引发异常

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

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

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

任何帮助将不胜感激:)

【问题讨论】:

    标签: java sql database db2 hibernate-annotations


    【解决方案1】:

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

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

    ALTER TABLE TBALE_A ALTER COLUMN TABLE_ID
       RESTART WITH 51
    

    【讨论】:

    • 如果你得到了答案,然后点击接受箭头接受答案。
    【解决方案2】:

    你的猜测是正确的,这是我的解决方案,执行下面的 SQL 给 ID 列一个指定的起始位置,那么你的应用程序就可以正常工作了。

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

    希望能帮到你:)

    【讨论】:

    • 非常感谢您的解决方案:)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多