Миграция весенней загрузки с 1.5.2.x на 2.3.8: Как обрабатывать локальное время, сохраненное как ByteArray

#postgresql #spring-boot #hibernate

Вопрос:

У меня была весенняя загрузка 1.5.x, а теперь я перешел на 2.3.8.РЕЛИЗ.

У меня есть объект с полем «private LocalDateTime EndTime», и в базе данных postgres он был сопоставлен с типом «bytea». Теперь, когда у меня, вероятно, появились более новые зависимости, в flyway появилась следующая ошибка:

 Schema-validation: wrong column type encountered in column [end_time] in table [stream_info]; found [bytea (Types#BINARY)], but expecting [timestamp (Types#TIMESTAMP)]
 

Это также появляется, когда я запускаю приложение с совершенно новой базой данных postgres.

Кто-нибудь знает, что мне теперь делать? Нужен ли мне конвертер? И в чем здесь может быть проблема?

Ответ №1:

Похоже, вы начали с версии Hibernate, которая еще не поддерживалась LocalDateTime , поэтому она была сериализована с помощью сериализации Java как bytea . Теперь вы используете более новую версию Hibernate, которая поддерживает этот тип и правильно сопоставляет его timestamp . Единственный обходной путь-это перенести данные. Вам придется прочитать каждую строку, десериализовать данные и записать их во временный timestamp столбец. После переноса всех данных вы можете переименовать столбец или удалить bytea столбец в пользу timestamp столбца. В любом случае, это потребует усилий по переносу вручную.

Комментарии:

1. Чтобы добавить к этому: Flyway не обновляет основные версии, если они не следуют друг за другом. Обязательно внимательно прочитайте github.com/spring-projects/spring-boot/wiki/…