ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Byron Tymvios <by...@scube.co.za>
Subject Re: Collection with composite key in XML mapping
Date Thu, 12 Nov 2009 18:17:11 GMT
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?


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-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org

View raw message