Вопрос о Spring Data JDBC + Hikari + Postgres JSONB - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать API, используя Spring Boot Data JDBC с Postgres.

У меня есть простое pojo, которое я хочу записать в таблицу:

public final class Test {
   private final String id;
   private final String definition;
}

Таблица имеет 2 столбца, столбец varchar id и столбец jsonb definition.

При использовании простого хранилища CRUD для сохранения pojo я получаю следующую ошибку.

ERROR: column "definition" is of type jsonb but expression is of type character varying

Обычно для этого нужно передать spring.datasourcehikari.connection-properties: stringtype=unspecified в application.yml, но я не могу заставить это работать.

Когда яактивировать журнал отладки для hikari Я вижу другие параметры, которые я активирую для него (например, имя пула)

HikariConfig testPool - configuration:
HikariConfig allowPoolSuspension.............false
HikariConfig autoCommit......................true
HikariConfig catalog.........................none
HikariConfig connectionInitSql...............none
HikariConfig connectionTestQuery.............none
HikariConfig connectionTimeout...............30000
HikariConfig dataSource......................none
HikariConfig dataSourceClassName.............none
HikariConfig dataSourceJNDI..................none
HikariConfig dataSourceProperties............{password=<masked>}
HikariConfig driverClassName................."org.postgresql.Driver"
HikariConfig healthCheckProperties...........{}
HikariConfig healthCheckRegistry.............none
HikariConfig idleTimeout.....................600000
HikariConfig initializationFailTimeout.......1
HikariConfig isolateInternalQueries..........false
HikariConfig jdbcUrl.........................jdbc:postgresql://localhost/test
HikariConfig leakDetectionThreshold..........0
HikariConfig maxLifetime.....................1800000
HikariConfig maximumPoolSize.................10
HikariConfig metricRegistry..................none
HikariConfig metricsTrackerFactory...........none
HikariConfig minimumIdle.....................10
HikariConfig password........................<masked>
HikariConfig poolName........................"testPool"
HikariConfig readOnly........................false
HikariConfig registerMbeans..................false
HikariConfig scheduledExecutor...............none
HikariConfig schema..........................none
HikariConfig threadFactory...................internal
HikariConfig transactionIsolation............default
HikariConfig username........................"test"
HikariConfig validationTimeout...............5000
HikariDataSource testPool - Starting...
HikariPool testPool - Added connection org.postgresql.jdbc.PgConnection@49ba49a7
HikariDataSource testPool - Start completed.

Это мое application.yml:

spring:
  datasource:
    url: jdbc:postgresql://localhost/test
    username: test
    hikari:
      connection-properties: stringtype=unspecified
      poolName: testPool
logging.level.com.zaxxer.hikari: DEBUG

Есть идеи?10

Редактировать:

Это интерфейс хранилища:

@Repository
interface TestRepository extends org.springframework.data.repository.<Test, String>{
}

1 Ответ

0 голосов
/ 20 ноября 2018

Я думаю, вам нужно использовать data-source-properties в файле свойств, как показано ниже

spring.datasource.hikari.data-source-properties = stringtype = unspecified

Затем добавьте две аннотации над геттером «Definition».

@ Basic @Enumerated (EnumType.STRING) public String getDefinition () {return definition;}

...