ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Torsten Michelmann" <torsten.michelm...@gmx.de>
Subject RE: AW: Problem with complex properties mapping
Date Mon, 15 May 2006 09:21:38 GMT
Hi finally I was able to overcome my problem but it would be great if
someone would be so kind to explain why it is now working.
Apparently it was some problem with the datatype mapping between the
database and the attribute types.

What I do not understand is:
Where is the difference between
<parameterMap id="prefColorsParams" class="java.util.Hashtable">
	<parameter property ="finr" jdbcType="VARCHAR" javaType="java.lang.String"
/>
    <parameter property ="sais" jdbcType="VARCHAR"
javaType="java.lang.String" />
    <parameter property ="koll" jdbcType="VARCHAR"
javaType="java.lang.String" />
    <parameter property ="form" jdbcType="VARCHAR"
javaType="java.lang.String" />
    <parameter property ="arnr" jdbcType="VARCHAR"
javaType="java.lang.String" />
</parameterMap>

and a simple Bean that just encapsulates these five String variables.
Because using the Bean the query for colours works and with the parameter
map it wont.

Could someone please enlight me? 

And while you are at it: 
Why does it only work if using the 'statement' element
<statement id="getColorForArticle" parameterClass="PrefColorsParams"
resultMap="getColor_Result"> ... </statement>

and not with the 'select' element
<select id="getColorForArticle" parameterClass="PrefColorsParams"
resultMap="getColor_Result">

Many greetings
Torsten



> --- Ursprüngliche Nachricht ---
> Von: "Poitras Christian" <Christian.Poitras@ircm.qc.ca>
> An: <user-java@ibatis.apache.org>
> Betreff: RE: AW: Problem with complex properties mapping
> Datum: Mon, 8 May 2006 10:53:42 -0400
> 
> I had those kinds of problem when I didn't have a normal getter and setter
> for a property in my class.
> 
> Check the getters and setters called by your CPL.readArticles_Result and
> getColor_Result maps and check if the setter are like this one.
> public void setProperty(Object o) {
>     this.property = o;
> }
> public Object getProperty() {
>     return this.property;
> }
> 
> 
> -----Original Message-----
> From: Torsten Michelmann [mailto:torsten.michelmann@gmx.de] 
> Sent: Monday, 08 May 2006 10:39
> To: user-java@ibatis.apache.org
> Cc: michal.bartmanski@star-trac.de
> Subject: Re: AW: Problem with complex properties mapping
> 
> Hi Michael,
> 
> I tried to implement your suggestion and it seems that I am now on the
> next level of the problem.
> 
> Hi I followed your suggestion as follows:
> <parameterMap id="prefColorsParams" class="java.util.HashMap">
>     <parameter property ="finr" />
>     <parameter property ="sais" />
>     <parameter property ="koll" />
>     <parameter property ="form" />
>     <parameter property ="arnr" />
> </parameterMap>
> 
> <select id="getColorForArticle" parameterMap="prefColorsParams"
> resultMap="getColor_Result">
> 
> now I get 
> 
> com.ibatis.common.jdbc.exception.NestedSQLException:   
> --- The error occurred in so/global/persistence/map/pdm/SqlMap.xml.  
> --- The error occurred while applying a result map.  
> --- Check the CPL.readArticles_Result.  
> --- The error happened while setting a property on the result object.  
> --- Cause: com.ibatis.common.beans.ProbeException: Could not set property
> 'articleColoursList' for so.global.persistence.map.pdm.ArticleMapper. 
> Cause: com.ibatis.common.exception.NestedRuntimeException: Error lazy
> loading result. Cause:
com.ibatis.common.jdbc.exception.NestedSQLException: 
>  
> --- The error occurred in so/global/persistence/map/pdm/Tobas_SqlMap.xml. 
> --- The error occurred while executing query.  
> --- Check the  		 		select distinct a.fbnr fbnr, 		case when a.fbez = ''
> 		then b.fbez else a.fbez end fbez 		from sodta.bavfsl a left outer join
> sodta.bavfnl b  		on a.finr=b.finr 		and a.sais=b.sais and a.koll=b.koll
> and
> a.fbnr=b.fbnr 		where a.finr=#finr# and a.sais=#sais# and a.koll=#koll#
> and
> a.form=#form# and a.vacp='' and a.arnr=#arnr# 		and a.glkz='A' order by
> fbnr
> 	 					 	.  
> --- Check the SQL Statement (preparation failed).  
> --- Cause: java.sql.SQLException: [SQL0206] Spalte #FINR# nicht in
> angegebenen Tabellen.
> 
> which looks like a problem with the database, but when I run the query
> manually against the DB it works.
> 
> I am quite irritated by the statement that the colum #FINR# does not exist
> as #FINR# is an attribute and not a table in the SQL.
> When using $$ I can see that finr is replaced by 010 which should be ok.
> 
> 
> Any new ideas?
> 
> Greetings Torsten
> 
> 
> 
> > --- Ursprüngliche Nachricht ---
> > Von: "Michal Bartmanski" <michal.bartmanski@star-trac.de>
> > An: <user-java@ibatis.apache.org>
> > Betreff: AW: Problem with complex properties mapping
> > Datum: Mon, 8 May 2006 12:12:06 +0200
> > 
> > Hi Torsten,
> > 
> > i thnk you're missing a parameterMap or parameterClass attribute in 
> > getColorForArticle statement.
> > 
> > gruss
> > michal
> > 
> > 
> > -----Ursprüngliche Nachricht-----
> > Von: Torsten Michelmann [mailto:torsten.michelmann@gmx.de]
> > Gesendet: Montag, 8. Mai 2006 11:55
> > An: user-java@ibatis.apache.org
> > Betreff: Problem with complex properties mapping
> > 
> > 
> > Hi,
> > 
> > I am new to DataMapper and it might be that my problem is rather easy 
> > to spot so please bear with me if the problem is trivial but I was not 
> > able to solve it for a few days now and I would be glad for any help.
> > 
> > I am running queries against an AS/400 using 
> > com.ibm.as400.access.AS400JDBCDriver
> > 
> > The error message that I get is
> > com.ibatis.common.jdbc.exception.NestedSQLException:   
> > --- The error occurred in
> so/global/persistence/map/pdm/Tobas_SqlMap.xml. 
> > --- The error occurred while applying a parameter map.  
> > --- Check the getColorForArticle-InlineParameterMap.  
> > --- Check the parameter mapping for the 'sais' property.  
> > --- Cause: java.lang.ArrayIndexOutOfBoundsException: 1 Caused by: 
> > java.lang.ArrayIndexOutOfBoundsException: 1
> > 	at
> >
>
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:188)
> > 	at
> >
>
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123)
> > 	at
> >
>
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:610)
> > 	at
> >
>
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:584)
> > 	at
> >
>
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:101)
> > 	at
> >
>
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:78)
> > 
> > And the mapping looks like
> > 
> > <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC 
> > "-//iBATIS.com//DTD SQL Map 2.0//EN"
> > "http://www.ibatis.com/dtd/sql-map-2.dtd">
> > 
> > <sqlMap namespace="MyApp">
> > 	<resultMap id="readArticles_Result" class="Article">
> > 		<result property="articleKey.articleId" column="articleid" />
> > 		<result property="articleName" column="fobz" />
> > 		<result property="formGroupKey.formGroupId" column="fogr" />
> > 		<result property="articleColoursList"
> > 			column="{finr=finr,sais=sais,koll=koll,form=form,arnr=arnr}"
> > select="getColorForArticle" />
> > 	</resultMap>
> > 	<resultMap id="getColor_Result" class="ArticleColourBase">
> > 		<result property="articleColourKey.articleColourId"
> > 			column="fbnr" />
> > 		<result property="label" column="fbez" />
> > 	</resultMap>
> > 
> > 	<select id="readArticlesByCollection" parameterClass="CollectionKey"
> > 		resultMap="readArticles_Result">
> > 		<![CDATA[
> > 		select distinct a.koll concat '.' concat a.sais concat '.' concat
> > substr(a.form, 3) concat '.' concat substr(a.arnr, 3) articleid ,	a.sais
> > sais, a.koll koll , a.form form, a.arnr arnr, a.fogr fogr, a.finr 
> > finr, a.fobz fobz
> > 		from sodta.bavksl a
> > 		where 
> > 		a.finr= (select distinct finr from sodta.bckollp where finr<= '060'  
> > and sgmt=#segmentId#  and glkz='J'  )
> > 		and	( a.sais= #seasonId#  or sais ='899')  and a.koll in (select koll
> > from
> > sodta.bckollp where finr<= '060'
> > 		and sgmt=#segmentId#  and glkz='J'  ) and a.glkz='A'
> > 		order by articleid
> > 		]]>
> > 	</select>
> > 
> > 	<select id="getColorForArticle" resultMap="getColor_Result">
> > 		<![CDATA[
> > 		select distinct a.fbnr fbnr,
> > 		case when a.fbez = ''
> > 		then b.fbez else a.fbez end fbez
> > 		from sodta.bavfsl a left outer join sodta.bavfnl b 
> > 		on a.finr=b.finr
> > 		and a.sais=b.sais and a.koll=b.koll and a.fbnr=b.fbnr
> > 		where a.finr = #finr# and a.sais = #sais# and a.koll = #koll# and 
> > a.form = #form# and a.vacp='' and a.arnr= #arnr#
> > 		and a.glkz='A' order by fbnr
> > 	]]>
> > 	</select>
> > </sqlMap>
> > 
> > I have experimented with the parameter sequence of 		
> > <result property="articleColoursList"
> > column="{finr=finr,sais=sais,koll=koll,form=form,arnr=arnr}"
> > select="getColorForArticle" /> but this did not yield any results.
> > A test of complex properties mapping using a simple data setup was 
> > successful, so I am now out of ideas.
> > Any help would be appreciated.
> > 
> > Greetings
> > Torsten
> > 
> > --
> > Greetings
> > Torsten
> > 
> > "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ...
> > Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail
> > 
> 
> --
> Gruß
> Torsten Michelmann
> 
> "Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ...
> Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail
> 

-- 
Gruß
Torsten Michelmann

Mobile Internet - E-Mail und Internet immer und überall!
GMX zum Mitnehmen: http://www.gmx.net/de/go/pocketweb

Mime
View raw message