cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <>
Subject Re: Passing Blobs to stored procedure
Date Tue, 06 Sep 2011 19:04:28 GMT
If you look at the OracleAdapter code in Cayenne and related classes, you'll see how bad we
have to bend things to ensure users can seamlessly work with Oracle CLOB/BLOB. So that's the
answer to the last question :-) Insert/update/delete/select should work with LOB columns.

I guess we just overlooked the aspect of using LOBs as sp parameters.


On Sep 6, 2011, at 2:41 PM, Joseph Senecal wrote:
> Hi Andrus,
> Currently the code is passing in a byte[], Cayenne is converting that into a MemoryBlob.
I have no problem with passing in a BLOB instead, but when I looked up how to create a BLOB
I got stuck. It requires a java.sql.Connection as a parameter, and I haven't been able to
find a way to return that from Cayenne. As far as I know, the connection might not be selected
for an ObjectContext until I perform the query.
> I checked the original code, which calls JDBC directly. There it just calls setBytes
on a Statement passing in the byte[], using a separate connection just for the stored procedure.
That should still work as a workaround.
> I'm going to see if I can get permission to move the stored procedure functionality to
Java since I think that will provide better performance. But will I run into the same problem
using Blobs as an oracle column in a record?
> Joe Senecal
> On Sep 4, 2011, at 9:58 AM, Andrus Adamchik wrote:
>> Hi Joe,
>> Oracle JDBC driver is messed up. Standard JDBC types are not working they way you'd
expect them, and then a bunch of custom types to deal with. This looks like one of the examples.

>> We may need to investigate if we can better abstract this particular case in Cayenne,
but just a guess - what if you use oracle.sql.BLOB instead of org.apache.cayenne.util.MemoryBlob
to call the stored procedure? I hope that should fix it in the interim.
>> Andrus
>> On Sep 2, 2011, at 6:39 PM, Joseph Senecal wrote:
>>> I'm trying to pass a Blob to a stored procedure. The parameter is defined in
the CayenneModeler as an IN parameter of type BLOB. I'm passing an array of bytes to ProcedureQuery.addParameter.
When the code runs it gets an cast exception "org.apache.cayenne.util.MemoryBlob cannot be
cast to oracle.sql.BLOB".
>>> I'm using version 3.1M2. Any suggestions as to what I'm doing wrong?
>>> Joe Senecal

View raw message