web-dev-qa-db-ja.com

Postgres Errorメソッドorg.postgresql.jdbc.PgConnection.createClob()は実装されていません

以下に示すように、接続オブジェクトを使用して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.xmlに次のPostgres依存関係を追加しました。

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

クラスで org.postgresql.jdbc.PgConnection、createClobの実装は次のようになり、例外がスローされます。

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

この問題を解決するための解決策または回避策は何ですか?またはPostgresクエリでCLOBデータを設定するにはどうすればよいですか?

17
Nirav Patel

TL; DR

  • 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-driverを新しい下位互換バージョンで更新します。
    • spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=trueapplication.ymlを設定するか、
    • Persistence.xmlでhibernate.jdbc.lob.non_contextual_creation=trueを設定します
  2. 動作しない場合は、次のトリックをご覧ください。

解決策は、プロパティファイルにこの行を追加することです(または、スプリングを使用していない場合は同様のものを追加します)

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

したがって、application.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に感謝。投稿を更新しました。

26
KeyMaker00

これをapplication.propertiesに入れます

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

PostgreSQLには「CLOB」はありません。 _Types.STRING_でsetString(String)またはsetObject(...)を使用するだけです。

1
Craig Ringer