Używam procedury składowanej, która zwraca 2 kursory i żadne z nich nie ma żadnych danych. Mam następujące mapowania xml:Program iBatis nie wypełnia obiektu, gdy nie znaleziono wierszy.
<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>
Pierwszy zestaw wyników jest umieścić w HashMap ... drugi resultSet jest umieścić w klasie MyBean
.
kod w moim DAO następująco:
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
w ostatnim wierszu above..my kod zawiedzie. Nie powiedzie się, ponieważ drugi kursor nie ma wierszy i dlatego nic nie jest wstawiane na listę. Jednak pierwszy kursor nic nie zwraca, ale ponieważ wyniki są wprowadzane do HashMap
, lista pierwszego kursora ma w środku obiekt HashMap
..
Dlaczego ta różnica? czy istnieje sposób, aby iBatis umieścił obiekt MyBean na liście, nawet jeśli nie ma zwróconych wierszy? A może powinienem zajmować się tym w moim DAO ... Chcę uniknąć posługiwania się nim w DAO, ponieważ mam całą masę takich DAO.