2015-07-14 2 views
1

При попытке конвертировать мое приложение с помощью MyBatis [это был iBatis раньше], я получаю следующую ошибку, несмотря на попытку сделать так много различных изменений кода: What я делаю неправильно? Любая помощь будет действительно действительно отличной !!!Проблема MyBatis: непризнанный jdbcType

Error message:  
 
`Caused by: org.springframework.jdbc.UncategorizedSQLException: ### Error querying database. Cause: com.ibm.db2.jcc.am.SqlException: [jcc][10271][10296][3.58.82] Unrecognized JDBC type: -10. ERRORCODE=-4228, SQLSTATE=null 
 
` 
 
`### The error may exist in Path-to-XML-File.XML` 
 
`### The error may involve namespace.resultMap-name` 
 
`### The error occurred while executing a query` 
 
`### SQL: {call name-of-stored-proc(?)}` 
 
`### Cause: com.ibm.db2.jcc.am.SqlException: [jcc][10271][10296][3.58.82] Unrecognized JDBC type: -10. ERRORCODE=-4228, SQLSTATE=null` 
 
`; uncategorized SQLException for SQL []; SQL state [null]; error code [-4228]; [jcc][10271][10296][3.58.82] Unrecognized JDBC type: -10. ERRORCODE=-4228, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][10271][10296][3.58.82] Unrecognized JDBC type: -10. ERRORCODE=-4228, SQLSTATE=null` 
 

 

 

 
XML File: ` 
 
<?xml version="1.0" encoding="UTF-8"?> 
 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
 
<mapper namespace="Namespace-name"> 
 
\t <resultMap id="retrieveReports-results" type="Folder-structure-to-Java-file" autoMapping="true"> 
 
\t \t <result property="name" column="REPORT_NAME"/> 
 
\t \t <result property="location" column="REPORT_DIRECTORY"/> 
 
\t \t <result property="key" column="REPORT_KEY"/> 
 
\t \t <result property="executable" column="EXECUTABLE"/> \t 
 
\t \t <result property="commandLine" column="COMMAND_LINE"/> \t 
 
\t \t <result property="commandLineFormat" column="COMMAND_LINE_FORMAT"/> \t \t 
 
\t </resultMap> 
 
<select id="retrieveReports" resultType="java.util.Map" statementType="CALLABLE"> 
 
\t \t {call prc_sel_reports(#{reports,jdbcType=CURSOR,javaType=java.sql.ResultSet,mode=OUT,resultMap=retrieveReports-results})} 
 
\t </select> 
 
</mapper>` 
 

 
Java code:  
 
\t \t 
 
\t \t try { 
 
\t \t \t \t 
 
\t \t \t List <Report> reports = super.getSqlSession().selectList("retrieveReports"); 
 
\t \t \t if(log.isDebugEnabled()){ 
 
\t \t \t \t log.debug("Retrieved " + reports.size() + " reports, in method: retrieveReports()"); 
 
\t \t \t } 
 
\t \t \t \t \t \t 
 
\t \t \t return reports; 
 
\t \t \t 
 
\t \t \t // Attempt to catch different kinds of exceptions. 
 
\t \t } catch (Exception e) { \t \t 
 
\t \t \t throw new RuntimeException("Exception caught while trying to retrieve reports", e); 
 
\t \t } 
 
\t

+0

У кого-нибудь есть представление об этом? – Newbee

ответ

1

Вы должны указать ParameterType в операторе выбора, либо карта или пользовательский класс. Экземпляр должен быть передан при вызове оператора. resultType не используется, то не имеет значения.

Процедура фактически записывается в поле параметра «вход», переданного в оператор mybatis, и оператор ничего не возвращает.

Mapper интерфейс будет: void retrieveReports(Map<String, Object> params); И ваш звонок:

Map<String, Object> params = new HashMap<String, Object>(); 
session.selectList("retrieveReports", params); 
List<Report> reports = (List<Report>)params.get("reports"); 

Param может быть также пользовательский тип со свойством private List<Report> reports;.

Смежные вопросы