Метод ошибок Postgres org.postgresql.jdbc.PgConnection.createClob() не реализован
Когда я 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, и добавил следующую зависимость Postgres в pom.xml
<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()");
}
Какое решение или способ обойти эту проблему? Или Как мы можем установить данные CLOB в запросах Postgres?
Ответы
Ответ 1
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 и выше.
Решение:
- Обновите ваш postgressql-драйвер более новой обратно совместимой версией.
- Установите
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
в application.yml
или,
- Установите
hibernate.jdbc.lob.non_contextual_creation=true
в вашем файле persistence.xml
- Если это не работает, посмотрите этот трюк ниже:
Решение состоит в том, чтобы добавить эту строку в свой файл свойств (или что-то подобное, если вы не используете 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
спящий режим с помощью c3p0: createClob() еще не реализован
Спасибо Binakot за его комментарий ниже. Я обновил пост.
Ответ 2
поместите это в application.properties
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
Ответ 3
PostgreSQL на самом деле не имеет "CLOB". Просто используйте setString(String)
или setObject(...)
с Types.STRING
.
Ответ 4
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = верно
Просто добавьте это к своему application.properties, и это может сработать. это сработало для меня.
Ответ 5
используя spring-boot 2.1.9.RELEASE я добавил следующее, и это сработало
spring:
jpa:
properties.hibernate.temp.use_jdbc_metadata_defaults: false
database-platform: org.hibernate.dialect.PostgreSQL94Dialect