SpringBoot+JPA+PostgreSQL整合問題

理論上本文適用於在使用 JPA+PostgreSQL 時 遇到 org.postgresql.jdbc.PgConnection.createClob() 問題的狀況git

環境以及主要依賴版本號

SpringBoot: 2.1.9.RELEASE程序員

PostgreSQL: 11.5github

PostgreSQL-Driver: 42.2.8spring

發生的問題

項目啓動時, 報org.postgresql.jdbc.PgConnection.createClob() is not yet implemented 錯誤, 可是不影響項目運行sql

可是博主有強迫症,必需要解決這個問題,遂Google之,也找到了不少解決方法,譬如添加以下配置:bash

出處:github.com/pgjdbc/pgjd…微信

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

相關文章
相關標籤/搜索