I have downloaded the latest trunk of iBatis 3 from SVN and did some debugging. It appears as if the composite key notation "#{param1=col1,param2=col2}" is never passed when building the ResultMapping. This results in the composite key only being treated as a regular column. The composites List in ResultMapping is only ever initialized to a new ArrayList but never populated with anything meaningful. Then when applying the results from the ResultSet the isComposite() method always returns false and so the nested select is never executed.

What is the process to follow to have this corrected?

Regards
 Byron

btymvios wrote:
Hi All,

Please if possible could someone assist me, I have been banging my head on
this problem for near a week now and this is holding my project up
seriously. I have tried everything I can think of and everything I can find.
As soon as I include the composite key mapping of
column=”{prop1=col1,prop2=col2}” in my xml mapping files the nested select
is never executed and no error is reported/thrown. Am I doing something
wrong in my mappings?

I have also included the #{id, javaType=int, jdbcType=Numeric} but also with
no luck.

Kind Regards
  Byron


btymvios wrote:
Apologies, there is a typo in my last post the "select" should have read:
    <select id="nestedSelect" parameterType="map"
resultMap="myTypeResultMap">
        SELECT *
        FROM my_type_table
        WHERE other_id = #{id} AND client_id = #{clientId}
    </select>


btymvios wrote:
Hi All,

Please could someone assist, I know this might be a silly question with a
simple answer but I have tried all examples I have found, I have read the
documentation and I have searched the forums and the internet but to no
avail.

I am using the latest beta version of iBatis 3 (beta 5) but had the same
problem with beta 4. In iBatis v2x these complex key mappings worked
fine.

The documentation states:

"Note: To deal with composite keys, you can specify multiple column names
to pass to the nested select statement by using the syntax
column=”{prop1=col1,prop2=col2}”. This
will cause prop1 and prop2 to be set against the parameter object for the
target nested select statement."

However when I specify this with multiple columns for a collection the
nested select is never run and no error is reported. In the referenced
"select" I am accessing the parameters by #{param1Name} and #{param2Name}
(where param1Name is the name of the first param etc..).

If I remove this and only specify one parameter like column="col_1" then
the referenced "select" is executed and the same param is used for both
parameter mapping in the select. So the collection mapping can access the
nested select and return a list of the correct type (albeit with a lot of
incorrect rows due to not matching on the full complex key) but not when
I have complex keys specified.

What is the correct notation for using multiple columns for complex keys
from a "collection" mapping. There are no examples in the documentation
other than the excerpt above. I have also not found any workable examples
on the internet.

I have found references on the internet to accesing params with @{param}
instead of #{param} which I have also tried with no luck. I have also
tried specifying paramaterType="map" on the nested select with no
results.

ResultMap (XML file 1):
<resultMap id="myResultMap" type="ResultClass">
    <id property="id" column="id" />
    <id property="clientId" column="client_id" />
    <result property="someProp" column="some_prop" />
    <collection property="myList" column="{id=id,clientId=client_id}"
javaType="ArrayList" ofType="MyType"
select="other.xml.namespace.MyTypeNS.nestedSelect" />
</resultMap>

Select (XML file 2):
<mapper namespace="other.xml.namespace.MyTypeNS">
    <resultMap id="myTypeResultMap" type="MyType">
         <!-- mapping of MyType -->
    </resultMap>
    <select id="nestedSelect" parameterType="map"
resultMap="myTypeResultMap">
        SELECT *
        FROM my_type_table
        WHERE other_id = #{id} AND client_id = #{client_id}
    </select>
</mapper>

Thanks for your time.
Byron




---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org
For additional commands, e-mail: user-java-h...@ibatis.apache.org

Reply via email to