springboot整合postgresql_SpringBoot+JPA+PostgreSQL整合问题

在SpringBoot 2.1.9.RELEASE版本中,使用JPA与PostgreSQL 11.5配合时遇到org.postgresql.jdbc.PgConnection.createClob()未实现的错误。该错误不会影响项目运行,但通过修改配置如设置database-platform为PostgreSQL9Dialect和禁用特定JDBC元数据默认值等方式无法解决问题。问题的根本在于Hibernate尝试验证PostgreSQL不支持的CLOB特性。通过升级Hibernate到5.4.x版本,具体为5.4.3.Final,成功解决了该问题,无需屏蔽检测特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理论上本文适用于在使用 JPA+PostgreSQL 时 遇到 org.postgresql.jdbc.PgConnection.createClob() 问题的情况

环境以及主要依赖版本号

SpringBoot: 2.1.9.RELEASE

PostgreSQL: 11.5

PostgreSQL-Driver: 42.2.8

发生的问题

项目启动时, 报org.postgresql.jdbc.PgConnection.createClob() is not yet implemented 错误, 但是不影响项目运行

但是博主有强迫症,必须要解决这个问题,遂Google之,也找到了很多解决方法,譬如添加如下配置:

spring:

jpa:

database-platform: org.hibernate.dialect.PostgreSQL9Dialect

properties:

hibernate:

temp:

use_jdbc_metadata_defaults: false

jdbc:

lob:

non_contextual_creation: true

然而很不幸的是,对我都没有效果。

解决的方法

究其原因呢,我也找到了如下解释:出处: https://vkuzel.com/spring-boot-jpa-hibernate-atomikos-postgresql-exception

These exceptions appears because JPA (Hibernate) supported by Atomikos is trying to verify PostgreSQL CLOB feature. This feature is not implemented by JDBC driver, so driver throws an unimportant exception. Unfortunately Atomikos has an exception listener which marks a connection as erroneous if any exception occurs.

那究其根本,是Hibernate验证了一个JDBC没实现的特效导致的,网上普遍的解决方式也是阴暗的屏蔽这个检测特性而已(我个人其实不喜欢这种做法),并且我发现这个问题也有人给Hiberante官方报了issues,那我是否可以通过升级Hibernate来解决呢?

搜了一通,也没见网上有人从这个方向入手,那我就做第一个吃螃蟹的人吧,我先看了看spring-boot-starter-data-jpa中引入的hibernate版本,发现是 5.1.x ,看了下首次发布日期是2016年,考虑到时间关系,我选择升级到 5.4.x 试一下,也省的去官方找发布日志了,先一把梭子先试为敬。

说干就干,我把spring-boot-starter-data-jpa中引入的hibernate版本 先剔除,然后,引入 5.4.x 版本的Hibernate-core,调整后的pom如下:

org.springframework.boot

spring-boot-starter-data-jpa

hibernate-core

org.hibernate

org.hibernate

hibernate-core

5.4.3.Final

启动项目,问题解决。

掘金专栏:程序员MkCoderMk 的个人主页 - 专栏 - 掘金​juejin.im

微信公众号:程序员Mk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值