当我使用连接对象调用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)
我正在使用带有JDK8的数据库PostgreSQL 9.6.2并使用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数据?
答案 0 :(得分:18)
<强> 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,则添加类似的内容)
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
hibernate with c3p0: createClob() is not yet implemented
感谢 Binakot 对他的评论。我已经更新了帖子。
答案 1 :(得分:2)
将其放入 application.properties
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
答案 2 :(得分:0)
PostgreSQL确实没有&#34; CLOB&#34;。只需将setString(String)
或setObject(...)
与Types.STRING
一起使用。
答案 3 :(得分:0)
使用spring-boot 2.1.9.RELEASE,我添加了以下内容,并且有效
spring:
jpa:
properties.hibernate.temp.use_jdbc_metadata_defaults: false
database-platform: org.hibernate.dialect.PostgreSQL94Dialect