ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Butler" <jeffgbut...@gmail.com>
Subject Re: Error getting another object in resultMap
Date Fri, 22 Sep 2006 14:11:29 GMT
This will work if you upgrade to iBATIS 2.2.0.  Older version don't allow
this kind of reuse (the property would have to be a collection for older
versions).  I think that's the issue.

Jeff Butler


On 9/22/06, Jeynes, Paul [CIB-IT] <paul.jeynes@citigroup.com> wrote:
>
> Hi,
>
> I'm just getting to grips with iBatis and am trying to retrieve and
> populate an object which itself contains another object.
>
> The main object is 'Trade', the secondary object is 'TradeStatus'.  I
> refer to the secondary object in the main resultmap by its result map name.
>
> The resultMap is configured as:
>
> <!-- main object -->
> <resultMap id="result" class="bdr.test.domain.Trade">
>    <result property="tradeId" column="trade_id" columnIndex="1"/>
>    <result property="tradeVersionId" column="trade_version_id"
> columnIndex="2"/>
>    <result property="fii" column="fii" columnIndex="3"/>
>    <result property="traderId" column="trader_id" columnIndex="4"/>
>    <result property="tradeDate" column="trade_date" columnIndex="5"/>
>    <result property="tradeInputDate" column="trade_input_date"
> columnIndex="6"/>
>    <result property="buySell" column="buy_sell" columnIndex="7"/>
>    <result property="quantity" column="quantity" columnIndex="8"/>
>    <result property="consideration" column="consideration"
> columnIndex="9"/>
>    <result property="dealtCurrency" column="dealt_currency"
> columnIndex="10"/>
>    <result property="dealtSecurityExchRate"
> column="dealt_security_exch_rate" columnIndex="11"/>
>    <result property="dealtPrice" column="dealt_price" columnIndex="12"/>
>    <result property="safeKeep" column="safe_keep" columnIndex="13"/>
>    <result property="executionDate" column="execution_date"
> columnIndex="14"/>
>    <result property="doNotBill" column="do_not_bill" columnIndex="15"/>
>    <result property="processCode" column="process_code" columnIndex="16"/>
>    <result property="tradeStatus" resultMap="Trade.tradeStatusMap"/>
> </resultMap>
>
> <!-- secondary object -->
> <resultMap id="tradeStatusMap" class="bdr.test.domain.TradeStatus">
>    <result property="tradeStatusCode" column="trade_status_code"/>
>    <result property="tradeShortDesc" column="short_desc"/>
>    <result property="tradeLongDesc" column="long_desc"/>
> </resultMap>
>
> <!-- simple join to get data for both objects -->
> <select id="getTradeById" resultMap="result">
>    SELECT t.trade_id, t.trade_version_id, t.fii, t.trader_id, t.trade_date,
> t.trade_input_date,
>       t.buy_sell, t.quantity, t.consideration, t.dealt_currency,
>       t.dealt_security_exch_rate, t.dealt_price, t.safe_keep,
> t.execution_date,
>       t.do_not_bill, t.process_code,
>       ts.trade_status_code, ts.short_desc, ts.long_desc
>    FROM trade t, trade_status_v ts
>    WHERE t.trade_id = #tradeId#
>    AND t.trade_version_id = #tradeVersionId#
>    AND ts.trade_status_code = t.trade_status
> </select>
>
> The secondary object is in the primary bean as follows:
>
> ...
>    private String doNotBill;
>    private TradeStatus tradeStatus;
>    private String processCode;
> ...
>
> The secondary bean is:
>
> public class TradeStatus implements Serializable {
>
>   /* Private Fields */
>
> private String tradeStatusCode;
> private String tradeShortDesc;
> private String tradeLongDesc;
>
> public String getTradeStatusCode() {
>      return tradeStatusCode;
> }
>
> public void setTradeStatusCode(String tradeStatusCode) {
>      this.tradeStatusCode = tradeStatusCode;
> }
>
> public String getTradeShortDesc() {
>      return tradeShortDesc;
> }
>
> public void setTradeShortDesc(String tradeShortDesc) {
>      this.tradeShortDesc = tradeShortDesc;
> }
>
> public String getTradeLongDesc() {
>      return tradeLongDesc;
> }
>
> public void setTradeLongDesc(String tradeLongDesc) {
>      this.tradeLongDesc = tradeLongDesc;
> }
> }
>
> When I attempt to get the data, the following is reported:
>
> org.springframework.web.util.NestedServletException: Request processing
> failed; nested exception is
> org.springframework.jdbc.UncategorizedSQLException: SqlMapClient
> operation; uncategorized SQLException for SQL []; SQL state [null]; error
> code [0];
> --- The error occurred in bdr/test/dao/ibatis/maps/Trade.xml.
> --- The error occurred while applying a result map.
> --- Check the Trade.result.
> --- The error happened while setting a property on the result object.
> --- Cause: com.ibatis.sqlmap.client.SqlMapException: Error instantiating
> collection property for mapping 'tradeStatus'.  Cause:
> java.lang.ClassCastException: bdr.test.domain.TradeStatus
> Caused by: java.lang.ClassCastException: bdr.test.domain.TradeStatus;
> nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
> --- The error occurred in bdr/test/dao/ibatis/maps/Trade.xml.
> --- The error occurred while applying a result map.
> --- Check the Trade.result.
> --- The error happened while setting a property on the result object.
> --- Cause: com.ibatis.sqlmap.client.SqlMapException: Error instantiating
> collection property for mapping 'tradeStatus'.  Cause:
> java.lang.ClassCastException: bdr.test.domain.TradeStatus
> Caused by: java.lang.ClassCastException: bdr.test.domain.TradeStatus
> Caused by: com.ibatis.sqlmap.client.SqlMapException: Error instantiating
> collection property for mapping 'tradeStatus'.  Cause:
> java.lang.ClassCastException: bdr.test.domain.TradeStatus
> Caused by: java.lang.ClassCastException: bdr.test.domain.TradeStatus
>        org.springframework.web.servlet.FrameworkServlet.processRequest(
> FrameworkServlet.java:406)
>        org.springframework.web.servlet.FrameworkServlet.doPost(
> FrameworkServlet.java:358)
>        javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
>        javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>
> Apologies if this has been answered many times before - I've looked for a
> similar example in the iBatis doc and also looked at the N+1 examples.  Am I
> getting about this the wrong way?
>
> Thanks,
>
> Paul.
>
> ========================
> Paul Jeynes
> CIB Tech - Equities Middle Office
> Citigroup Global Markets Limited
> * +44 (0) 2890 409213           Citigroup
> *  +44 (0) 2890 409136          Legacy Bldg
> : paul.jeynes@citigroup.com     N. Ireland Science Park
> *                               Belfast BT3 9DT
>
>
>
> ========================
> Paul Jeynes
> CIB Tech - Equities Middle Office
> Citigroup Global Markets Limited
> * +44 (0) 2890 409213           Citigroup
> *  +44 (0) 2890 409136          Legacy Bldg
> : paul.jeynes@citigroup.com     N. Ireland Science Park
> *                               Belfast BT3 9DT
>
>

Mime
View raw message