Greenplum+mybatis問題解析


1. 問題描述

同事團隊在使用springboot+mybatis+Greenplum時,發現通過mybatis數據查詢正常,但是執行insert和update執行會報“Cause: org.postgresql.util.PSQLException: ERROR: The RETURNING clause of the INSERT statement is not supported in this version of Greenplum Database.”。

而我們團隊使用Greenplum的模式是:晚上通過spark跑批入庫Greenplum,平台只使用了Greenplum的查詢功能,未使用Mybatis進行插入操作。

2. 解決方案

2.1 問題定位

首先創建同樣格式的test表,驗證jdbc方式是否可行,驗證后,發現jdbc能正常插入,認為問題可能出在mybtis或者postgre/greeenplum版本問題上。

2.2 定位結論

經過多次驗證,發現問題出在:

Mybatis3默認在插入或者更新數據后,會返回影響行數( int insert(trorgvehiclviewtest record);),但是Greenplum是基於postgresql8.2開發的,postgresql8.2不支持返回這個特性導致的。

2.3 解決方案

​ 通過在insert/update語句后面,增加statementType參數可以解決該問題,statementType參數設置為"CALLABLE" 就能正常使用。

​ 示例:

    <insert id="insert" parameterType="com.laowang.Test" statementType="CALLABLE">
    </insert>

​ 取值說明:

1、STATEMENT:直接操作sql,不進行預編譯,獲取數據:$—Statement

2、PREPARED:預處理,參數,進行預編譯,獲取數據:#—–PreparedStatement:默認

3、CALLABLE:執行存儲過程————CallableStatement



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM