My compliments on a most useful product. I'm always thinking about ways
to improve the signal-to-noise ratio in business software, and SqlMaps
seems like a simple way to reuse a wide variety of familiar real-world
Java objects by linking them directly to SQL parameters and
results.
One of the first things to catch my eye was the ability to use Maps as
parameters and result sets. I realize that a lot of the time you need a
level of indirection between Java objects and SQL fields, and JavaBeans
are a fine place for it, but if you don't need the indirection at this
level in your architecture, usings Maps instead of JavaBeans could save a
lot of otherwise useless code made up of nothing but thousands of getter
and setter methods.
I tried a 1:N select the non-join way, and I found that everything worked
as advertised when I mapped my primary result set to a Bean class. But
when I tried to map it to a java.util.Map, I couldn't get iBatis to
return the secondary objects as a java.util.List, even though I specified
a javaType attribute in the primary result map. Can anyone tell me what I
did wrong? Can I put a "[]" someplace or something?
<?xml
version="1.0"?>
<!DOCTYPE sqlMap PUBLIC
"-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<!-- Version 1 Release 0 Build 2 Update 4 -->
<!-- Built by ProDia.gram 2.0 on Tue Nov 08 08:44:10 EST 2005
-->
<sqlMap>
<resultMap id="mapUserObject"
class="Release">
<result
property="id" column="ID"/>
<result
property="description"
column="DESCRIPTION"/>
<result
property="application"
column="APPLICATION"/>
<result
property="version" column="VERSION"/>
<result
property="issueList" column="ID"
select="getIssues"/>
</resultMap>
<resultMap id="mapToMap"
class="java.util.HashMap">
<result
property="id" column="ID"/>
<result
property="description"
column="DESCRIPTION"/>
<result
property="application"
column="APPLICATION"/>
<result
property="version" column="VERSION"/>
<result
property="issueList" column="ID"
select="getIssues"
javaType="java.util.ArrayList"/>
</resultMap>
<select id="getNestedObjects"
parameterClass="int"
resultMap="mapUserObject">
SELECT ID, APPLICATION,
VERSION, DESCRIPTION FROM TEST.RELEASE
WHERE ID = #value#
</select>
<select id="getNestedMaps"
parameterClass="int"
resultMap="mapToMap">
SELECT ID, APPLICATION,
VERSION, DESCRIPTION FROM TEST.RELEASE
WHERE ID = #value#
</select>
<select id="getIssues"
parameterClass="int"
resultClass="java.util.HashMap">
SELECT A.ISSUE_ID, DESCRIPTION
FROM TEST.ISSUE AS A
INNER JOIN TEST.ISSUE_RELEASE
AS B ON (A.ID = B.ISSUE_ID)
WHERE RELEASE_ID =
#value#
</select>
</sqlMap>
"getNestedObjects" works fine, but
"getNestedMaps" returns a HashMap for the issueList property
instead of an ArrayList, or it fails with "executeQueryForObject
returned too many results" when there is more than one issue for a
release. I read the documentation several times and I can't find anything
that says that this shouldn't work, but I can't seem to make it
happen.
Thanks in advance.
- gary
------------------------------------------------------------------------
The information contained in this communication is intended
only for the use of the recipient(s) named above. It may
contain information that is privileged or confidential, and
may be protected by State and/or Federal Regulations. If
the reader of this message is not the intended recipient,
you are hereby notified that any dissemination,
distribution, or copying of this communication, or any of
its contents, is strictly prohibited. If you have received
this communication in error, please return it to the sender
immediately and delete the original message and any copy
of it from your computer system. If you have any questions
concerning this message, please contact the sender.
------------------------------------------------------------------------
- Map containing Lists of Maps Gary Bradshaw
- Re: Map containing Lists of Maps Gary Bradshaw
- How to unsubscribe? Josh
