【问题标题】:Question about Spring Data JDBC + Hikari + Postgres JSONB关于Spring Data JDBC + Hikari + Postgres JSONB的问题
【发布时间】:2019-04-22 20:19:12
【问题描述】:

我正在尝试使用 Spring Boot Data JDBC 和 Postgres 构建 API。

我有一个简单的 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

解决方案通常是在 application.yml 中传递spring.datasourcehikari.connection-properties: stringtype=unspecified,但我无法让它工作。

当我为 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

有什么想法吗? ????

编辑:

这是仓库界面:

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

【问题讨论】:

  • 请添加用于从数据库映射值的存储库的代码。
  • @KarolDowbecki 感谢您的警告。我已经添加了。
  • 您说您使用的是 Spring Data JDBC,但这看起来像 Spring Data JPA。 CrudRepository 类的全名是什么?
  • @KarolDowbecki org.springframework.data.repository.CRUDRepository
  • @KarolDowbecki 如果我将jsonb 列更改为text,它会完美运行

标签: java spring-boot spring-data hikaricp spring-data-jdbc


【解决方案1】:

我认为您需要在属性文件中使用 data-source-properties,如下所示

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

然后在“定义”的getter上方添加两个注解。

@基本 @Enumerated(EnumType.STRING) 公共字符串 getDefinition() { 返回定义; }

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 2017-03-14
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多