4

エラーが発生しました:

org.mybatis.spring.MyBatisSystemException:ネストされた例外はorgです。アパッチ。ibatis。exceptions.PersistenceException:

java.lang.IllegalArgumentException:マップされたステートメントコレクションに..の値が含まれていません。 "

Javaを使用してmybatisからストアドプロシージャを呼び出すとき。

私はPostgreSQLをデータベースおよびSpringMVCフレームワークとして使用しています。このため、ストアドプロシージャを呼び出す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
 }
4

2 に答える 2

1

ストアドプロシージャを呼び出すための私の構文は、MyBatisとストアドプロシージャの両方で正しいです。

Springフレームワークを使用しているため、推移的な依存関係があるため、ストアドプロシージャはJavaのMyBatisから呼び出していません。

そこで、pom.xmlファイルで推移的な依存関係を見つけてから、MyBatisのすべての依存関係を除外し、Springフレームワークに最新バージョンのMyBatisを使用します。

これで正常に動作しています。

于 2013-04-29T05:21:55.663 に答える
0

構成をからに変更してみてinsertくださいselect

<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>
于 2013-04-07T04:15:23.670 に答える