论坛首页 Java企业应用论坛

一个包含List元素的HashMap参数如何赋给sqlMap

浏览 10562 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-25  
DAO中有以下方法:

public Integer getOrderformCountByBiOid(String biOid, String titlesearch, List recBiOidsearch) throws Exception {
		HashMap paramMap=new HashMap();
		paramMap.put("biOid", biOid);
		paramMap.put("titlesearch", titlesearch);
		paramMap.put("recBiOidsearch", recBiOidsearch);
		return (Integer) this.sqlMapClient.queryForObject("getOrderformCountByBiOid", paramMap);
	}


上面的recBiOidsearch元素是一个List,里面包含了一个oid列表。biOid和titlesearch是String。

我的sqlMap代码如下:
<select id="getOrderformByBiOid" parameterClass="java.util.HashMap" resultMap="OrderformResult">
		select * 
		from OPINION_ORDERFORM   
		<dynamic prepend="where">
		   <isNotNull prepend="and" property="biOid">
		     BIOID=#biOid#
		   </isNotNull>
		   <isNotNull prepend="and" property="titlesearch">
		     ORDERTITLE like '%$titlesearch$%'
		   </isNotNull>
		   <isNotNull prepend="and" property="recBiOidsearch">
		     RECBIOID in
            <iterate   open="(" close=")" conjunction=",">
             #recBiOidsearch[]#
            </iterate>
		   </isNotNull>
		</dynamic>
		order by SENDTIME DESC
	</select>


我希望执行的是一个这样的sql(假设所有的元素都不是null的话):
select * from OPINION_ORDERFORM
where BIOID=#biOid#
and ORDERTITLE like '%$titlesearch$%'
and RECBIOID in(1,2,3)

但是报错,信息如下:
com.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred in sql-map/Orderform.xml. 
--- The error occurred while preparing the mapped statement for execution. 
--- Check the getOrderformByBiOid. 
--- Check the parameter map. 
--- Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.


如果我将List相关的sqlmap删掉,即下面这段代码删掉:
<isNotNull prepend="and" property="recBiOidsearch">
		     RECBIOID in
            <iterate   open="(" close=")" conjunction=",">
             #recBiOidsearch[]#
            </iterate>
		   </isNotNull>


他就没问题了,所以我怀疑 parameterClass="java.util.HashMap"是不是错误,还是有别的问题呢?请教各位有经验者,十分感谢!!!如果能有更好地解决办法,还麻烦发上来,感谢!
   发表时间:2007-12-25  
找到问题了!!刚发完帖google了一下,iterate应该加上property="recBiOidsearch"的属性。因为没有写这个,iterate找不到集合。
0 请登录后投票
   发表时间:2008-01-07  
原来如此,所以在遍历之前要设置被跌代对象
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics