Estoy ejecutando un procedimiento almacenado que devuelve 2 cursores y ninguno de ellos tiene datos. tengo el siguiente código XML de mapeo:iBatis no rellena objeto cuando no hay filas encontradas
<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>
primer conjunto de resultados se está poniendo en un HashMap ... segundo conjunto resultado se ser puesto en una clase MyBean
.
código en mi DAO sigue:
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
en la última línea above..my código falla. Falla porque el segundo cursor no tiene filas y es por eso que nada se pone en la lista. Sin embargo, el primer cursor no devuelve nada pero, como los resultados se ponen en un HashMap
, la lista del primer cursor al menos tiene HashMap
objeto dentro de ella ..
¿Por qué esta diferencia? ¿Hay alguna manera de hacer que iBatis ponga un objeto de MyBean dentro de la lista, incluso si no se devuelven las filas? O debería manejar esto en mi DAO ... Quiero evitar manejarlo en el DAO porque tengo un montón de DAO como estos.