Postgres Error method org.postgresql.jdbc.PgConnection.createClob() 未实现

2022-09-02 09:10:15

当我使用连接对象调用方法时,如下所示:createClob

Clob clob = con.createClob();

将引发以下异常:

Caused by: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
        at org.postgresql.Driver.notImplemented(Driver.java:659)
        at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1246)
        at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868)
        at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868)

我正在使用数据库PostgreSQL 9.6.2和JDK8,并使用commons-dbcp2连接池,并在pom中添加了以下Postgres依赖项.xml

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.1.1</version>
</dependency>

在类中,createClob 实现如下所示,它抛出了异常:org.postgresql.jdbc.PgConnection

@Override
public Clob createClob() throws SQLException {
    checkClosed();
    throw org.postgresql.Driver.notImplemented(this.getClass(), "createClob()");
}

解决此问题的解决方案或解决方法是什么?或者我们如何在Postgres查询中设置CLOB数据?


答案 1

TL;DR

  • 设置在您的 or,spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=trueapplication.yml
  • 设置在您的hibernate.jdbc.lob.non_contextual_creation=truepersistence.xml

这是 JBoss 社区中的一个已知错误。

此错误出现在Spring-Boot 2.0.0.RC1的早期版本和新版本中。

解决方案

  1. 使用较新的向后兼容版本更新您的postgressql驱动程序。
    • 设置在您的 or,spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=trueapplication.yml
    • 在你的坚持中设置.xmlhibernate.jdbc.lob.non_contextual_creation=true
  2. 如果它不起作用,请参阅下面的技巧:

解决方案是在属性文件中添加此行(如果您不使用spring,则添加类似的东西)

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults= false

因此,您的应用程序.yml 应如下所示:

spring:
    application:
      name: employee-service

    datasource:
      url: jdbc:postgresql://localhost:5432/db_development
      platform: POSTGRESQL
      username: ...
      password: ...

    jpa:
      hibernate:
        ddl-auto: create-drop
        dialect: org.hibernate.dialect.PostgreSQL9Dialect
        show_sql: true
      properties.hibernate.temp.use_jdbc_metadata_defaults: false


server:
  port: 8080

参考:

https://o7planning.org/en/11661/spring-boot-jpa-and-spring-transaction-tutorial

使用 c3p0 休眠:createClob() 尚未实现

感谢Binakot的评论。我已经更新了帖子。


答案 2

把它放到应用程序.属性

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

推荐