J'utilise spring 3 avec la dernière version de Mybatis.Procédure mybatis oracle SYS_REFCURSOR erreur de paramètre de réglage
Je suis en train de faire appel de procédure qui renvoie le résultat du curseur, voici mon code
Mon erreur est le suivant, toute aide est appréciée ..
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.NullPointerException
### The error may involve com.comcast.triage.dao.AccountDetailDao.getAccountDetail-Inline
### The error occurred while setting parameters
### SQL: { ? = call ABC.get_acc_info(?, ?, ?, ?) }
### Cause: java.lang.NullPointerException
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:364)
at $Proxy21.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:250)
Ce qui suit est dao Interface
public interface AccountDetailDao {
void getAccountDetail(Map<String, Object> parameter);
}
Après est mon mappeur xml
<mapper namespace="com.dao.AccountDetailDao">
<resultMap id="accountDetailResult" type="accountDetail">
<result property="usid" column="usid" />
<result property="accountNumber" column="account_number" />
<result property="headendInEEg" column="headend_in_eeg" />
<result property="customerType" column="customer_type" />
<result property="corp" column="corp" />
</resultMap>
<update id="getAccountDetail" parameterType="map" statementType="CALLABLE">
{ #{o_acc_cur,jdbcType=CURSOR,mode=OUT,resultMap=accountDetailResult,javaType=java.sql.ResultSet} =
call ABC_TRI.get_acc_info(#{accountNumber,jdbcType=VARCHAR,mode=IN}, #{authGuid,jdbcType=VARCHAR,mode=IN}, #{mac,jdbcType=VARCHAR,mode=IN}, #{usid,jdbcType=VARCHAR,mode=IN}) }
</update>
mybatis contient également config pour alias
<typeAlias type="com.comcast.triage.domain.AccountDetail" alias="accountDetail"/>
suivant est ma signature de procédure de package oracle
PROCEDURE get_acc_info(
i_account_number IN VARCHAR2,
i_auth_guid IN VARCHAR2,
i_mac IN VARCHAR2,
i_usid IN VARCHAR2,
o_acc_cur OUT SYS_REFCURSOR);
test de l'appelant est comme suivant
@Autowired
privé AccountDetailDao accountDetailDao;
@Test public void Test() {
Map<String, Object> param = new HashMap<String, Object>();
param.put("i_account_number", null);
param.put("i_auth_guid", null);
param.put("i_mac", "0162014707802#0");
param.put("i_usid", null);
accountDetailDao.getAccountDetail(param);
Object obj =param.get("o_acc_cur");
Assert.assertTrue(true);
}
Avez-vous vérifié la procédure stockée dans la base de données pour vous assurer que 'o_acc_cur' n'est pas null? – Jarandinor