Ich führe eine gespeicherte Prozedur aus, die 2 Cursor zurückgibt und keine von ihnen hat Daten. Ich habe die folgende Abbildung xml:iBatis füllt kein Objekt, wenn keine Zeilen gefunden werden
<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>
erstes Ergebnis in einer HashMap gesetzt wird ... zweite resultSet in einer MyBean
Klasse gesetzt wird.
Code in meinem DAO folgt:
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
in der letzten Zeile above..my Code fehlschlägt. Es schlägt fehl, weil der zweite Cursor keine Zeilen hat und deshalb nichts in die Liste eingetragen wird. Der erste Cursor gibt jedoch auch nichts zurück, aber da die Ergebnisse in eine HashMap
eingegeben werden, hat die Liste für den ersten Cursor zumindest HashMap
Objekt darin.
Warum dieser Unterschied? Gibt es eine Möglichkeit, iBatis ein Objekt von MyBean in die Liste zu setzen, selbst wenn keine Zeilen zurückgegeben werden? Oder sollte ich das in meiner DAO behandeln? Ich möchte vermeiden, es in der DAO zu handhaben, weil ich eine ganze Menge DAO's habe.