注釈を使用して、SQL Server ストアド プロシージャを MyBatis にマップしたいと考えています。
@Select(value = "{call sp_cen_obliczcene(" +
"#{wytworId, mode=IN, jdbcType=NUMERIC}, " +
"#{rodzajCenyId, mode=IN, jdbcType=NUMERIC}, " +
"#{walutaId, mode=IN, jdbcType=NUMERIC}, " +
"#{jmId, mode=IN, jdbcType=NUMERIC}, " +
"#{ilosc, mode=IN, jdbcType=DECIMAL}, " +
"#{data, mode=IN, jdbcType=DATE})}")
@Result(property = "kwota", column = "kwota", javaType = BigDecimal.class, jdbcType = JdbcType.DECIMAL)
@Options(statementType = StatementType.CALLABLE)
public DtoCena dajCene(CriteriaCena parametry);
この手順では、1 つの行を選択します。1 つの列に関心があります。今、私は以前に手順をマップしましたが、複数の行があり、それらから複数の列を選択しただけです。すべてが完璧に機能しました。新しいプロシージャをマップすると、同様の方法でエラーが発生しました。
### The error occurred while setting parameters
### SQL: {call sp_cen_obliczcene(?, ?, ?, ?, ?, ?)}
### Cause: java.lang.NullPointerException
SQL プロファイラを起動すると、プロシージャが指定されたパラメータで適切に呼び出されることがわかりました。マッピングしているプロシージャが他のプロシージャを実行していることに気付きました。彼らはいくつかの更新を実行しています。注釈を @Update に変更すると、別のエラーが発生しました。Integer は DtoCena 型にキャストできません。メソッドの戻り値を Integer に変更したところ、エラーは発生しませんでしたが、ご想像のとおり、探していたものが返されませんでした。
問題は、テーブルを更新して ResultSet を返すストアド プロシージャをマップできるかどうかです。JDBC を使用してこれを行うことができますが、MyBatis では可能ですか? @Select アノテーションを使用するときに何か問題がありますか?