Ибатис Реф Куроср проблема с Oracle - PullRequest
0 голосов
/ 04 ноября 2010

Я использую Java и Ibatis для вызова хранимой процедуры в базе данных Oracle.Кажется, у меня проблема с настройкой параметров.

Процедура сохранения выглядит следующим образом:

PROCEDURE Get_Semployees_By_Clt_ID
    (
        client_id IN HRIS.SEMPLOYEES.SEE_CLT_ID%TYPE,    
        ref_cursor OUT SYS_REFCURSOR
    );

My Ibatis SqlMap:

<sqlMap namespace="Foo">


<resultMap id="employee-map" class="MyFoo">  
   <result property="foo1" column="foo1"/>  
   <result property="foo2" column="foo2"/>  
</resultMap>   

<parameterMap id="clientEmployeesParms" class="java.util.Map" >
    <parameter property="in1" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
    <parameter property="output1" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet"    mode="OUT" />
</parameterMap>

    <procedure id="clientEmployees" parameterMap="clientEmployeesParms" resultMap="employee-map">
    { call Package.Get_Clt_ID(?,?) }
    </procedure>

</sqlMap>

Моя Java:

resource = "SqlMapConfig.xml";
reader = Resources.getResourceAsReader (resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Map map = new HashMap();
map.put("in1", new Integer(23));
list = sqlMap.queryForList("Foo.clientEmployees", map);

Ошибка:

--- The error occurred while applying a parameter map.  
--- Check the Employee.clientEmployeesParms.  
--- Check the output parameters (retrieval of output parameters failed).  
--- Cause: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
 at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188)
 at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
 at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610)
 at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584)
 at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101)
 at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
 at com.apache.struts.employee.model.IbatisStoredProcedure.main(IbatisStoredProcedure.java:30)

Ответы [ 3 ]

3 голосов
/ 16 ноября 2012

У меня была точно такая же проблема. Он создается, когда у вас есть iBatis до 2.1.5 и log4j в пути к классам.

Вы можете найти больше информации здесь:

https://issues.apache.org/jira/browse/IBATIS-152

Обновление до iBatis 2.1.5 или удаление log4j из пути к классам.

0 голосов
/ 04 ноября 2010

Я работаю с iBatis.NET и Oracle, и мне удалось вернуть рефкурсор из хранимой процедуры следующим образом (обратите внимание, что выходной параметр является первым в списке, а свойство / столбец соответствует sproc:

<parameterMap id="GetServiceTypes-param">
            <parameter property="P_CURSOR" direction="Output" column="P_CURSOR" dbType="RefCursor"/>
            <parameter property="P_TYPSERVICETYPE" direction="Input" />
</parameterMap>

..

  PROCEDURE GETSERVICETYPES(P_CURSOR OUT CURDATA, 
                            P_TYPSERVICETYPE CLM_SERVICE_TYPES_TBL.SERVICETYPE%TYPE := NULL);
0 голосов
/ 04 ноября 2010

Питер.Собираетесь ли вы через bootcamp?(Я работаю там, где вы работаете, возможно, в том же здании. Завтра я отправлю вам электронное письмо.)

Я думаю, что проблема в том, что в resultMap должны быть имена свойств, совпадающие с тем, что происходит.вернулся по процедуре.В этом случае все, что выбирается в курсоре.

...