以下に示すように、接続オブジェクトを使用して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データを設定するにはどうすればよいですか?
TL; DR
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
にapplication.yml
を設定するか、hibernate.jdbc.lob.non_contextual_creation=true
にpersistence.xml
を設定しますJBossコミュニティの既知のエラーです。
このエラーは、以前のバージョンとSpring-Boot 2.0.0.RC1以降の新しいバージョンで発生します。
ソリューション:
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
にapplication.yml
を設定するか、hibernate.jdbc.lob.non_contextual_creation=true
を設定します解決策は、プロパティファイルにこの行を追加することです(または、スプリングを使用していない場合は同様のものを追加します)
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に感謝。投稿を更新しました。
これをapplication.propertiesに入れます
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
PostgreSQLには「CLOB」はありません。 _Types.STRING
_でsetString(String)
またはsetObject(...)
を使用するだけです。