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: Result mapping
Date Fri, 22 Sep 2006 19:15:54 GMT
Did you try setting resultClass="byte[]"?  I think it might work (no
resultMap in this case).  It will work the same as if you set resultClass to
some other simple type (like Integer) - I think iBATIS is smart enough to
know that these types don't really have properties.

So I'm thinking this:

<select id="loadDoc" parameterClass="DocumentStore" *resultClass="byte[]"*>
   readtext op_document_store.document #textPointer# 0 #dataLength#

Then do this:

byte[] doc = (byte[]) queryForObject(...);

It would be worth a try...

Jeff Butler

On 9/22/06, Christopher.Mathrusse@sybase.com <
Christopher.Mathrusse@sybase.com> wrote:
>  iBatis 2.2.0 (just compiled from source)
> Sybase ASE 12.5
> I'm storing an XML document into a db table. I've defined the column as an
> IMAGE datatype. Sybase stores these large amounts of data on pages, external
> to the table.
> From the Sybase documentation:
> Instead of storing potentially large text and image data in the table,
> Adaptive Server stores it in a special structure. A text pointer (*textptr
> *) which points to the page where the data is actually stored is assigned.
> Retrieving the data is a two step process. You must first get the pointer
> and the length of the data and then you can retrieve the data. So I'm first
> performing a select to retrieve the row of data less the IMAGE column. Then
> in my resultMap, on the IMAGE column, I define a select attribute to perform
> the load of the data. Everything appears to work correctly. I can step
> through the code and see everything getting fired correctly and the data
> being returned in a byte[]. My problem here is the way I have defined my
> resultMap for the retrieval of the IMAGE data. At first I thought that I
> would define the resultClass as my object that expected to receive the data,
> but that is not correct. (I get a ClassCastException because the returned
> object is not of the expected type to be assigned.) I need to define the
> resultClass as a byte[] for everything to succeed correctly, but if I define
> my resultClass as a byte[], then what is the property of the byte[] that
> will be assigned the result? I can't leave the property attribute off of the
> Result element as that makes the XML invalid, so how do I get around this?
> Thanks for the help.
> Below is my SQL Map:
> <code>
>   <typeAlias alias="DocumentStore" type="
> com.sybase.cosmos.domain.DocumentStore"/>
>   <resultMap class="DocumentStore" id="DocumentStoreResult">
>     <result column="id" jdbcType="NUMERIC" property="id"/>
>     <result column="order_no" jdbcType="VARCHAR" property="orderNo"/>
>     <result column="order_code" jdbcType="VARCHAR" property="orderCode"/>
>     <result column="create_date" jdbcType="TIMESTAMP"
> property="createDate" />
>     <result column="mod_date" jdbcType="TIMESTAMP" property="modifiedDate"
> />
>     <result column="version" jdbcType="INTEGER" property="version" />
>     <result column="{textPointer=text_pointer,dataLength=data_length}"
> property="bytes" select="DocumentStore.loadDoc"/>
>   </resultMap>
>   <resultMap class="byte[]" id="DocumentStoreDocResult">
>     <result column="document" jdbcType="LONGVARCHAR" property="bytes"/>
>   </resultMap>
>   <select id="findByPrimaryKey" resultMap="DocumentStoreResult">
>     select
>       docStore.id
>     , docStore.order_no
>     , docStore.order_code
>     , docStore.create_date
>     , docStore.mod_date
>     , docStore.version
>     , textptr(document) as text_pointer
>     , datalength(document) as data_length
>     from
>       document_store docStore
>     where
>       docStore.id = #id:NUMERIC#
>   </select>
>   <!--
>     Retrieves the document based upon the text pointer and the length of
> the data
>     The record must first be retrieved to aquire these values.
>   -->
>   <select id="loadDoc" parameterClass="DocumentStore"
> resultMap="DocumentStoreDocResult">
>     readtext op_document_store.document #textPointer# 0 #dataLength#
>   </select>
> </code>
> Chris Mathrusse
> christopher.mathrusse@sybase.com
> (925) 236-5553

View raw message