Я выполняю хранимую процедуру, которая возвращает 2 курсора, и ни у одного из них нет данных.
У меня есть следующее сопоставление XML:
<resultMap id="resultMap1" class="HashMap">
<result property="firstName" columnIndex="2"/>
</resultMap>
<resultMap id="resultMap2" class="com.somePackage.MyBean">
<result property="unitStreetName" column="street_name"/>
</resultMap>
<parameterMap id="parmmap" class="map">
<parameter property="id" jdbcType="String" javaType="java.lang.String" mode="IN"/>
<parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="resultMap1"/>
<parameter property="Result1" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="resultMap2"/>
</parameterMap>
<procedure id="proc" parameterMap="parmmap">
{ call my_sp (?,?,?) }
</procedure>
Первый набор результатов помещается в HashMap ... второй набор результатов помещается в класс MyBean
.
Код
в моем DAO следующий:
HashMap map = new HashMap()
map.put("id", "1234");
getSqlMapClientTemplate().queryForList("mymap.proc", map);
HashMap result1 = (HashMap)((List)parmMap.get("Result0")).get(0);
MyBean myObject = (MyBean)((List)parmMap.get("Result1")).get(0);//code fails here
в последней строке выше .. мой код не выполняется. Сбой из-за того, что второй курсор не имеет строк, и поэтому ничего не заносится в список. Тем не менее, первый курсор также ничего не возвращает, но поскольку результаты помещаются в HashMap
список для первого курсора, по крайней мере, содержит HashMap
объект внутри него.
Почему эта разница? Есть ли способ заставить iBatis поместить объект MyBean в список, даже если не возвращены строки? Или я должен обрабатывать это в моем DAO ... Я хочу избежать обработки этого в DAO, потому что у меня есть целая куча DAO, подобных этим.