Перечисление postgresql сломалось во время перехода с весенней загрузки 1.5-> 2.0 - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь перенести проект из Springboot 1.5 в 2.0 . Пока что все, что я сделал, это переименовал некоторые грубые методы репо и обновил мой файл сборки gradle. Теперь при запуске моего приложения я получаю эту ошибку при попытке сохранить в БД:

| 2018-05-02 16:39:10.581 -DEBUG 20748 [Scheduler-1] org.hibernate.SQL              : insert into table_a (enum_column) values (?)
| 2018-05-02 16:39:10.581 -TRACE 20748 [Scheduler-1] org.hibernate.type.EnumType    : Binding [OPTIONA] to parameter: [1]
| 2018-05-02 16:39:10.620 - WARN 20748 [Scheduler-1] ne.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42804
| 2018-05-02 16:39:10.634 -ERROR 20748 [Scheduler-1] ne.jdbc.spi.SqlExceptionHelper : ERROR: column "enum_column" is of type custom_enum but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 121

Все работало до моей попытки перейти на более новую версию Springboot. Я не видел ничего в руководстве по миграции, которое обсуждает это. Кто-нибудь знает об изменениях в одном из этих (или других распространенных пакетов), которые могут вызвать эту проблему?

  • spring-core-4.3.12 -> 5.0.5
  • spring-data-jpa-1.11.8 -> 2.0.6
  • spring-boot-starter-data-jpa-1.5.8 -> 2.0.1
  • flyway-core-4.2.0 -> 5.0.7
  • PostgreSQL-42.2.2
  • hibernate-core-5.0.12 -> 5.2.16

Вот урезанные версии соответствующего кода перечисления:

Из моей модели, используя аннотации JPA

@Entity
@Table(name = "table_a")
public class CustomTable {
    @Enumerated(EnumType.STRING)
    @Column(name = "enum_column", nullable = false)
    private CustomEnum enumField;

Объявление enum

public enum CustomEnum {
    OPTIONA, OPTIONB
}

Миграция БД Flyway

CREATE TYPE custom_enum AS ENUM('OPTIONA', 'OPTIONB'); 
CREATE TABLE table_a (
    id                  bigserial PRIMARY KEY,
    enum_column         custom_enum NOT NULL
);

Дайте мне знать, если вам нужны другие номера версий пакетов или дополнительные фрагменты кода. Спасибо!

1 Ответ

0 голосов
/ 11 мая 2018

После дальнейшего поиска я понял, что проблемы возникают не только с типом enum, с аналогичными проблемами сталкиваются столбцы с типом jsonb. Это заставило меня взглянуть на более широкие проблемы с БД, и, конечно же, следующее свойство из моего application.properties больше не работало:

spring.datasource.tomcat.connection-properties = stringtype=unspecified

Это имеет смысл, потому что я использовал пул соединений JDBC по умолчанию, который был изменен с tomcat на hikari в SpringBoot 2.0. Чтобы решить эту проблему, все, что я сделал, это заменил строку свойств соединения tomcat на:

spring.datasource.hikari.data-source-properties = stringtype=unspecified
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...