Как обновить столбец первичного ключа?


До недавнего времени я использовал hibernate @Entity аннотация для сопоставления с таблицами базы данных.Все первичные ключи аннотируются с помощью @GeneratedValue(strategy = GenerationType.IDENTITY)

У меня есть сценарий, в котором мне нужно создать новую схему + перенести данные из старой схемы в новую схему.(с небольшими изменениями столбцов, такими как drop, length и type)

После успешной миграции данных в новые таблицы схемы, когда я пытаюсь вставить данные с помощью приложения, его выбрасывает исключение

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

Я верю это приложение пытается снова вставить строки со значением первичного ключа, начиная с 1, потому что то же приложение отлично работает с пустыми таблицами.

Я хочу, чтобы строки данных вставлялись со значением первичного ключа как наивысшее значение существующего первичного ключа строк .

Любая помощь будет благодарна полностью :)

3 2

3 ответа:

Ваше предположение верно, вот мое решение, выполните следующий SQL, чтобы дать столбцу ID заданную начальную позицию, тогда ваше приложение будет работать нормально.

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

Надеюсь вам помочь:)

Да, вы можете сделать это, изменив таблицу. Измените таблицу и задайте начальный индекс для столбца identity в DB2.

Предположим, что максимальное число строк для TBALE_A равно 50, а имя столбца идентификатора равно TABLE_ID

ALTER TABLE TBALE_A ALTER COLUMN TABLE_ID
   RESTART WITH 51

В случае generation type, IDENTITY, вы должны искать столбец identity, чтобы быть автоинкрементным. @GeneratedValue (strategy = GenerationType.IDENTITY) требуется, чтобы столбец первичного ключа был автоматически инкрементным.