java - 关于 Spring Data JDBC + Hikari + Postgres JSONB 的问题

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

我正在尝试使用 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 时,出现以下错误。

错误:列“definition”的类型为 jsonb,但表达式的类型为字符变化

解决方案通常是在 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>{
}

最佳答案

我认为您需要在属性文件中使用数据源属性,如下所示

spring.datasource.hikari.data-source-properties = stringtype=未指定

然后在“definition”的 getter 上方添加两个注释。

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

关于java - 关于 Spring Data JDBC + Hikari + Postgres JSONB 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392146/

相关文章:

java - 这行代码解释一下?

java - 使用 java 将字符串插入到日期时间 mysql 列中。

mysql - Spring Boot 应用程序运行正常,但 hibernate 和 MySql 相关属性不起作用

Java - 如何完全清除变量

java - Spring Boot 无法扫描多个模块的注释

xml - 如何使用 XML 配置和启用 Spring Data REST?

java - 在 JScrollPane 中使用绝对布局

java - 从 AsyncTask 返回对象时出现问题

jpa - Spring 数据: when use Projection interfaces and DTO projections?

java - Spring数据抛出 'No aliases found in result tuple'