2020/03/26

[spring] com.mchange.v2.c3p0.impl.NewProxyConnection.createClob()

將專案導入 spring 時,常常會出現意想不到的狀況,像是預設行為默默地被改變之類的。
開發環境為
  • spring-boot:2.2.5.RELEASE
  • hibernate:4.3.11.Final
  • spring-orm:4.3.25.RELEASE
沒有使用 spring-jpa,一方面是對 JPA 還不太熟悉,另外是對於 transaction 要不要交給 spring 管理,尚未確定。導入 spring-orm 時,與 hibernate 介接後,開始用 spring boot 執行程式,就跳出 exception。
Caused by: java.lang.AbstractMethodError: 
    com.mchange.v2.c3p0.impl.NewProxyConnection.createClob()Ljava/sql/Clob;
Exception 是由 hibernate 中管理連線的 c3p0 跳出,上網 google 相關討論滿多的,先試試第一種解法,升級 c3p0 版本,升級到 0.9.5.2。c3p0 版本升級後,跳出新的 exception,變成 postgresql jdbc 沒有實作,詳見 github issue
Caused by: org.postgresql.util.PSQLException: 這個 org.postgresql.jdbc4.Jdbc4Connection.createClob() 方法尚未被實作。
 at org.postgresql.Driver.notImplemented(Driver.java:753)
 at org.postgresql.jdbc4.AbstractJdbc4Connection.createClob(AbstractJdbc4Connection.java:40)
接著第二種方法是在 hibernate.properties 中,新增設定,不需要特別去升級 c3p0,如果有使用 spring-jpa,設定又會不一樣,開啟後就沒有跳出 exception,一切正常。
hibernate.temp.use_jdbc_metadata_defaults=false
Spring 與 hibernate 整合的完整流程
https://tpu.thinkpower.com.tw/tpu/articleDetails/1303

Reference
https://blog.csdn.net/qq_36439700/article/details/81330954
https://blog.csdn.net/Elion_jia/article/details/80651588

沒有留言:

張貼留言