2012-09-04 71 views
4

我得到的錯誤:如何從MyBatis Java調用存儲過程?

org.mybatis.spring.MyBatisSystemException: nested exception is org. apache. ibatis. exceptions.PersistenceException:

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for .."

當我打電話使用Java存儲從MyBatis的過程。

我正在使用PostgreSQL作爲數據庫和Spring MVC框架。爲此,我調用存儲過程的DAO類是:

Orders orders=new Orders(); 

值以編程方式在順序變量中設置。

Integer insert= getSqlSession().insert("records",orders);** 

我MyBatis的文件看起來像這樣:

<insert id="records" parameterType="Orders" statementType="CALLABLE"> 
{call fn_records_tbl(#{rId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{state,javaType=String,jdbcType=CHAR,mode=IN},#{uId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{status,javaType=String,jdbcType=CHAR,mode=IN})} 
</insert> 

我的存儲過程的語法是:

CREATE OR REPLACE FUNCTION fn_records_tbl(rId integer, state character,uId integer, status character) 

RETURNS void AS 

$BODY$ 
DECLARE 

    -- my code 
BEGIN 

    -- my code 
END 

$BODY$ 

LANGUAGE plpgsql VOLATILE 
COST 100; 

ALTER FUNCTION fn_records_tbl(integer, character, integer, character) 
OWNER TO mydba; 

和我傳遞參數實體類是:

public class Orders implements Serializable { 

    private static final long serialVersionUID = 267216928694677437L; 
    private Integer uId; 
    private Integer rId; 
    private String status; 
    private String state; 

    // here are my setter and getter 
} 
+0

你可以在這裏添加你的映射代碼並給出完整的錯誤信息嗎? –

回答

1

My syntax for calling stored procedure is correct both in MyBatis and in stored procedure.

由於我使用Spring框架,以便由於某些傳遞依賴我的存儲過程不從MyBatis的Java中調用。

所以我檢查了我的pom.xml文件以找到傳遞性依賴關係,然後我排除了MyBatis的所有這些依賴關係,並將最新版本的MyBatis用於Spring框架。

現在它工作正常。

+0

你能更具體嗎?我與MyBatis 3和Oracle 11g有同樣的問題 – greyfox

0

嘗試改變你的配置uration從insertselect

<select id="records" parameterType="Orders" statementType="CALLABLE"> 
{call fn_records_tbl(#{rId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{state,javaType=String,jdbcType=CHAR,mode=IN},#{uId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{status,javaType=String,jdbcType=CHAR,mode=IN})} 
</select> 
+1

這不是問題,我通過更改MyBatis jar的版本來解決它。我得到它的最新版本。 – Ruju