Liquibase: Измените столбец автоинкремента INT на BIGINT, используя рефакторинг modifyDataType с базой данных H2

У меня есть столбец первичного ключа, который является столбцом 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;

Несколько моментов:

  • Отображение гибернации работает до рефакторинга типа данных
  • Версия Liquibase - 2.0.1
  • Работает ли это с MySQL, еще не проверено
5
задан tronda 11 October 2011 в 12:14
поделиться