У меня есть столбец первичного ключа, который является столбцом INT, который я хотел бы изменить на BIGINT. Наша тестовая и производственная среда использует MySQL, но для модульных тестов мы используем встроенную базу данных H2.
Я создал следующий рефакторинг Liquibase:
...
<changeSet id="1" author="trond">
<modifyDataType tableName="event" columnName="id" newDataType="BIGINT" />
<rollback>
<modifyDataType tableName="event" columnName="id" newDataType="INT" />
</rollback>
</changeSet>
...
Рефакторинг работает, но когда я пытаюсь сохранить объект в базе данных с помощью Hibernate, я получаю следующее сообщение об ошибке (я заключил сообщение об ошибке):
ERROR org.hibernate.util.JDBCExceptionReporter [main]: NULL not allowed for column "ID";
SQL statement: insert into event (id, eventtime, guid, meta, objectguid, originatorid, subtype, type) values (null, ?, ?, ?, ?, ?, ?, '0') [90006-140]
JDBC exception on Hibernate data access:
SQLException for SQL [insert into event (id, eventtime, guid, meta, objectguid, originatorid, subtype, type) values (null, ?, ?, ?, ?, ?, ?, '0')];
SQL state [90006]; error code [90006]; could not insert: [event.MyEvent];
nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [event.MyEvent]
Класс MyEvent наследуется от AbstractBaseEvent, который определил в коде следующее отображение Hibernate:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
Несколько моментов: