Thanks. I was under the (mistaken) impression that
since the inline parameter method was dynamically converting the string that was
passed into a method call that the parameterMap technique would do the same
thing.
I played around with it and changing the caller (as you
suggested) worked just fine. An alternative (and, I think, cleaner) solution is
to simply change the parameterMap to receive a base class String, like
so:
<parameterMap id="getemployeeMastersParam"
class="java.lang.String">
<parameter property="org" />
</parameterMap>
<parameter property="org" />
</parameterMap>
Thanks
for the tip on the caching method. The docs at http://ibatisnet.sourceforge.net/DevGuide.html#d0e160 says:
"Many "agile" developers would start with
something like Example 3 and add features like caching later. If you changed the
Data Map from Example 3 to Example 4, you would not have to touch your
application source code at all. You can start simple and add complexity only
when it is needed."
Which I (again, mistakenly) interpreted that "caching"
went with "paramterMap" and not the inline method. Of course, a closer reading
of the docs down at Example 38 shows caching being used inline.
:-)
Thanks again for your help!
--
Gary Blackburn
From: Jeff Butler [mailto:[EMAIL PROTECTED]
Sent: Tuesday, May 30, 2006 1:06 PM
To: [email protected]
Subject: Re: Problem Converting Inline Parameters to Parameter Map
I suspect that the problem is in the code that calls this statement - you
need to do this:
employeeMaster em = new employeeMaster();
em.setOrg("someorg");
sqlMap.queryForList("getEmployeeMasters", em);
Your calling code is probably still passing in a String for #org# for the
previous version of the sql map like this:
sqlMap.queryForList("getEmployeeMasters", "someorg");
Two other comments:
1. By convention, Java classes whould start with upper case letters
(EmployeeMaster rather than employeeMaster)
2. I don't understand what you think the the link is between parameter maps
and caching. We use caching a lot and never use a parameter map. I
think you only need to use parameter maps with stored procedures.
Jeff Butler
On 5/30/06, Blackburn,
Gary (HHS/RHRC) <[EMAIL PROTECTED]>
wrote:
Hi all. I'm having trouble converting some (working) inline parameters to the equivalent parameter map.This works just fine:<select id="getemployeeMasters" resultClass="org.model.employeeMaster">SELECT substr(administrative_code, 1, 3) as org
FROM administrative_code a, employeeMaster eWHERE rtrim(a.administrative_code) = rtrim(e.org)AND a.administrative_code like #org#GROUP BY substr(administrative_code, 1, 3)
</select>This does not:<parameterMap id="getemployeeMastersParam" class="org.model.employeeMaster">
<parameter property="org" />
</parameterMap><select id="getemployeeMasters" parameterMap="getemployeeMastersParam">SELECT substr(administrative_code, 1, 3) as org
FROM administrative_code a, employeeMaster eWHERE rtrim(a.administrative_code) = rtrim(e.org)AND a.administrative_code like ?GROUP BY substr(administrative_code, 1, 3)
</select>I get the following error:WARN - CommonsLoggingOutput.warn(44) | Erroring: id[510_1149004528570] message[org.springframework.jdbc.UncategorizedSQLException: (SqlMapClient operation): encountered SQLException [
--- The error occurred in org/dao/ibatis/employeeMasterSQL.xml.
--- The error occurred while preparing the mapped statement for execution.
--- Check the getemployeeMasters.
--- Cause: java.sql.SQLException : Invalid parameter object type. Expected 'org.model.employeeMaster' but found 'java.lang.String'.]; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in org/dao/ibatis/employeeMasterSQL.xml.
--- The error occurred while preparing the mapped statement for execution.
--- Check the getemployeeMasters.
--- Cause: java.sql.SQLException: Invalid parameter object type. Expected 'org.model.employeeMaster ' but found 'java.lang.String'.From what I can tell these two versions should be functionally equivalent but obviously they are not. (I need to convert to a parameter map so that I can turn on caching.)Any help would be appreciated! :-)--Gary Blackburn
