理論上本文適用於在使用 JPA+PostgreSQL 時 遇到 org.postgresql.jdbc.PgConnection.createClob() 問題的狀況git
SpringBoot: 2.1.9.RELEASE
程序員
PostgreSQL: 11.5
github
PostgreSQL-Driver: 42.2.8
spring
項目啓動時, 報org.postgresql.jdbc.PgConnection.createClob() is not yet implemented 錯誤, 可是不影響項目運行
sql
可是博主有強迫症,必需要解決這個問題,遂Google之,也找到了不少解決方法,譬如添加以下配置:bash
spring:
jpa:
database-platform: org.hibernate.dialect.PostgreSQL9Dialect
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
jdbc:
lob:
non_contextual_creation: true
複製代碼
然而很不幸的是,對我都沒有效果。app
究其緣由呢,我也找到了以下解釋:spring-boot
出處: vkuzel.com/spring-boot…post
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
以下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<artifactId>hibernate-core</artifactId>
<groupId>org.hibernate</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.3.Final</version>
</dependency>
複製代碼
啓動項目,問題解決。
知乎專欄:程序員Mk
微信公衆號:程序員Mk