Получение данных из курсора в mybatis

Я новичок в mybatis и пытаюсь вызвать функцию, возвращающую курсор из mybatis. Вот некоторые фрагменты кода:

PL/SQL Функция:

FUNCTION student_fetch(
 p_id VARCHAR2,
 p_usr_id VARCHAR2,
 p_program_code VARCHAR2)
 RETURN t_students_cursor
IS
 cur t_students_cursor;
 --v_cnt INT;
BEGIN
 --check_student_info_permission(p_osis_id, p_usr_id, p_program_code, v_cnt);
 --IF v_cnt > 0 THEN
 OPEN cur FOR SELECT srec.First_Name, srec.Last_Name, srec.Middle_Initial,

Запись XML:

<resultmap id="accountDetailResult" type="student">
 <result property="firstName" column="First_Name">
 <result property="lastName" column="Last_Name">

 </result></result></resultmap>

 <select id="getAccountDetail" parametertype="map" statementtype="CALLABLE">
 { #{t_students_cursor,jdbcType=CURSOR,mode=OUT,resultMap=accountDetailResult,javaType=java.sql.ResultSet} = 
 call students.student_fetch(#{osisId,jdbcType=VARCHAR,mode=IN}, #{userId,jdbcType=VARCHAR,mode=IN},#{programCode,jdbcType=VARCHAR,mode=IN})}

 </select>

Класс POJO:

public class Student {



 private String firstName;

 private String lastName;


 private String emailAddress;

 private String daytimeTelephoneNumber;

 private String id;

 private String userId;

 private String programCode;

Интерфейс карты:

void getAccountDetail(@Param("map") Map<string, object=""> parameter);
</string,>

Класс тестера:

Map<string, object=""> param = new HashMap<string, object="">();
 param.put("p_d", "214996787");
 param.put("p_usr_id", "admin");
 param.put("p_program_code", null);
 productServiceObj.getAccountDetail(param);
 Student st = (Student)param.get("t_students_cursor");
</string,></string,>

Исключение:

org.apache.******.exceptions.PersistenceException: 
### Error querying database. Cause: java.lang.NullPointerException
### The error may involve com.example.services.ProductServices.getAccountDetail-Inline
### The error occurred while setting parameters
### Cause: java.lang.NullPointerException
 at org.apache.******.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
 at org.apache.******.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:61)
 at org.apache.******.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:53)
 at org.apache.******.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:38)
 at org.apache.******.binding.MapperMethod.execute(MapperMethod.java:66)
 at org.apache.******.binding.MapperProxy.invoke(MapperProxy.java:35)
 at $******.getAccountDetail(Unknown Source)
 at com.example.runner.AppTester.main(AppTester.java:79)
Caused by: java.lang.NullPointerException
 at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:870)
 at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:960)
 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
 at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
 at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
 at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4223)
1 ответ

Захватывающая настройка:

#{t_students_cursor,jdbcType=CURSOR,mode=OUT,resultMap=accountDetailResult,javaType=java.sql.ResultSet} = call students.student_fetch(#{osisId,jdbcType=VARCHAR,mode=IN}, #{userId,jdbcType=VARCHAR,mode=IN},#{programCode,jdbcType=VARCHAR,mode=IN})}

это правильный путь. "вызов" должен быть встроен с "# {t_students_cursor, jdbcType = CURSOR, mode = OUT, resultMap = accountDetailResult, javaType = java.sql.ResultSet} ="

licensed under cc by-sa 3.0 with attribution.