ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Niels Beekman" <n.beek...@wis.nl>
Subject RE: Problem with Multiple resultmaps in 2.2.0
Date Wed, 16 Aug 2006 14:45:34 GMT
I think you should use the fully qualified name of the resultmap, so
User.countryResult shoulud work just fine. Does this behaviour occur
only with 2.2.0 or did you just mention it to be complete?

 

Niels

 

________________________________

From: Javier Urbaneja [mailto:urbanejarl@gmail.com] 
Sent: woensdag 16 augustus 2006 14:03
To: user-java@ibatis.apache.org
Subject: Problem with Multiple resultmaps in 2.2.0

 

This is my map file User.xml:

<sqlMap namespace="User">

  <resultMap class="es.como.jtp.domain.User" id="userResult">
    <result property="idUser"              column="ID_USER"
jdbcType="INTEGER"  javaType="int"/> 
    <result property="country"             resultMap="countryResult"/>
    <result property="city"                column="CITY"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="givenName"           column="GIVEN_NAME"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="firstSurname"        column="FIRST_SURNAME"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="secondSurname"       column="SECOND_SURNAME"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="dateOfBirth"         column="DATE_OF_BIRTH"
jdbcType="DATE"     javaType="date"/> 
    <result property="email"               column="EMAIL"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="nickname"            column="NICKNAME"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="address"             column="ADDRESS"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="town"                column="TOWN"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="zip"                 column="ZIP"
jdbcType="INTEGER"  javaType="int"       nullValue="0"/>
    <result property="lastLoginDate"       column="LAST_LOGIN_DATE"
jdbcType="DATE"     javaType="date"/> 
    <result property="registerDate"        column="REGISTER_DATE"
jdbcType="DATE"     javaType="date"/>
    <result property="password"            column="PASSWORD"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="gender"              column="GENDER"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="homePhoneNumber"     column="HOME_PHONE_NUMBER"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="mobilePhoneNumber"   column="MOBILE_PHONE_NUMBER"
jdbcType="VARCHAR"  javaType="string"/>
    <result property="documentNumber"      column="DOCUMENT_NUMBER"
jdbcType="VARCHAR"  javaType="string"/> 
    <result property="active"              column="ACTIVE"
jdbcType="INTEGER"  javaType="boolean"   nullValue="false"/>
    <result property="confirmed"           column="CONFIRMED"
jdbcType="INTEGER"  javaType="boolean"   nullValue="false"/> 
    <result property="karma"               column="KARMA"
jdbcType="INTEGER"  javaType="int"       nullValue="0"/>
    <result property="points"              column="POINTS"
jdbcType="INTEGER"  javaType="int"       nullValue="0"/> 
    <result property="success"             column="SUCCESS"
jdbcType="INTEGER"  javaType="int"       nullValue="0"/>
  </resultMap>
  
  <resultMap class="es.como.jtp.domain.Country" id="countryResult">
    <result property="idCountry" column="ID_COUNTRY" jdbcType="INTEGER"
javaType="int"/> 
    <result property="name" column="COUNTRY" jdbcType="VARCHAR"
javaType="string"/>
  </resultMap>

  <insert id="registerUser" parameterClass=" es.como.jtp.domain.User">
    <selectKey keyProperty="idUser" resultClass="int">
      select user_register_seq.nextval as idUser from dual
    </selectKey>
    insert into users (id_user, nickname, password, email, id_country) 
    values (#idUser:INTEGER#, #nickname:VARCHAR#, #password:VARCHAR#,
#email:VARCHAR#, 1)
  </insert>
    
  <select id="getUserByNickname" resultMap="userResult"
parameterClass="string"> 
    select * from users,countries where users.id_country =
countries.id_country and nickname = #value#
  </select>
</sqlMap>


And this is stack after invoking the select getUserByNickname:


Stack

    org.apache.struts.beanaction.BeanActionException: Error dispatching
bean action via URL pattern ('registerUser').  Cause:
org.apache.struts.beanaction.BeanActionException: Error invoking Action.
Cause: java.lang.reflect.InvocationTargetException


        at
org.apache.struts.beanaction.BeanAction.execute(BeanAction.java:249)

        at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:419)

        at org.apache.struts.action.RequestProcessor.process
(RequestProcessor.java:224)

        at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

        at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

        at javax.servlet.http.HttpServlet.service
(HttpServlet.java:709)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:252)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:173)

        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:213)

        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:178)

        at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:432)

        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:126)

        at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:105)

        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:107)

        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:1
48)

        at org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:869)

        at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.proc
essConnection(Http11BaseProtocol.java:664)

        at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint
.java
:527)

        at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollow
erWorkerThread.java:80)

        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:684)

        at java.lang.Thread.run
(Thread.java:595)

Caused by: org.apache.struts.beanaction.BeanActionException: Error
invoking Action.  Cause: java.lang.reflect.InvocationTargetException

        at
org.apache.struts.beanaction.ActionInvoker.invoke(ActionInvoker.java
:18)

        at
org.apache.struts.beanaction.DefaultActionInterceptor.intercept(DefaultA
ctionInterceptor.java:5)

        at
org.apache.struts.beanaction.BeanAction.execute(BeanAction.java:246)

        ... 21 more

Caused by: java.lang.reflect.InvocationTargetException


        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)

        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java
:25)

        at java.lang.reflect.Method.invoke(Method.java:585)

        at
org.apache.struts.beanaction.ActionInvoker.invoke(ActionInvoker.java:16)

        ... 23 more

Caused by: org.apache.struts.beanaction.BeanActionException: There was a
problem creating your Account Information.  Cause: 
com.ibatis.dao.client.DaoException: Failed to execute queryForObject -
id [getUserByNickname], parameterObject [mira].  Cause:
com.ibatis.common.jdbc.exception.NestedSQLException:   

--- The error occurred in
es/como/jtp/persistence/sqlmapdao/sql/User.xml.  


--- The error occurred while applying a result map.  

--- Check the User.userResult.  

--- The error happened while setting a property on the result object.  

--- Cause: com.ibatis.sqlmap.client.SqlMapException
: There is no result map named countryResult in this SqlMap.

Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.

        at es.como.jtp.presentation.UserBean.registerUser
(UserBean.java:129)

        ... 28 more

Caused by: com.ibatis.dao.client.DaoException: Failed to execute
queryForObject - id [getUserByNickname], parameterObject [mira].  Cause:
com.ibatis.common.jdbc.exception.NestedSQLException
:   

--- The error occurred in
es/como/jtp/persistence/sqlmapdao/sql/User.xml.  

--- The error occurred while applying a result map.  

--- Check the User.userResult.  

--- The error happened while setting a property on the result object.  


--- Cause: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.

Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.


        at
com.ibatis.dao.client.template.SqlMapDaoTemplate.queryForObject(SqlMapDa
oTemplate.java:225)

        at
es.como.jtp.persistence.sqlmapdao.UserSqlMapDao.getUser(UserSqlMapDao.ja
va:15)

        at sun.reflect.NativeMethodAccessorImpl.invoke0
(Native Method)

        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)

        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)

        at java.lang.reflect.Method.invoke
(Method.java:585)

        at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:72)

        at $Proxy0.getUser(Unknown Source)

        at es.como.jtp.service.UserService.getUser(UserService.java:22)

        at es.como.jtp.presentation.UserBean.registerUser
(UserBean.java:124)

        ... 28 more

Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:   

--- The error occurred in
es/como/jtp/persistence/sqlmapdao/sql/User.xml.  

--- The error occurred while applying a result map.  


--- Check the User.userResult.  

--- The error happened while setting a property on the result object.  

--- Cause: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.


Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.

        at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
WithCallback(GeneralStatement.java
:188)

        at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
ForObject(GeneralStatement.java:104)

        at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlM
apExecutorDelegate.java
:565)

        at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlM
apExecutorDelegate.java:540)

        at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSes
sionImpl.java:106)

        at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject
(SqlMapClientImpl.java:84)

        at
com.ibatis.dao.client.template.SqlMapDaoTemplate.queryForObject(SqlMapDa
oTemplate.java:223)

        ... 37 more

Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no result
map named countryResult in this SqlMap.


        at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.getResultMap(SqlMap
ExecutorDelegate.java:356)

        at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setNestedResultMa
ppingValue(BasicResultMap.java:420)


        at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.applyNestedResult
Map(BasicResultMap.java:396)

        at
com.ibatis.sqlmap.engine.mapping.result.BasicResultMap.setResultObjectVa
lues(BasicResultMap.java:382)




        at
com.ibatis.sqlmap.engine.mapping.statement.RowHandlerCallback.handleResu
ltObject(RowHandlerCallback.java:64)

        at
com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor
.java:376)

        at
com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults
(SqlExecutor.java:295)

        at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.
java:186)

        at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteQu
ery(GeneralStatement.java:205)


        at
com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQuery
WithCallback(GeneralStatement.java:173)

        ... 43 more



  

If I "inline" the country resultmap (like before 2.2.0) by commenting
out: 
<!-- <result property="country"             resultMap="countryResult"/>
-->
and adding:
<result property="country.idCountry"   column="ID_COUNTRY"
jdbcType="INTEGER"  javaType="int"/> 
<result property="country.name"        column="COUNTRY"
jdbcType="VARCHAR"  javaType="string"/>
then it works perfectly. 

Greetings and thank you.





Mime
View raw message