« Return to Thread: Hibernate + Derby - Unable to determine stream header for hibernate type 'text'

Re: Hibernate + Derby - Unable to determine stream header for hibernate type 'text'

by kashyup :: Rate this Message:

Reply to Author | View in Thread

Hi kristian,
thanks for logging the bug.
I will try to look for some workarounds.

The CLOB(255) column size limitation is another open bug logged in Hibernate. As Hibernate's DerbyDialect creates a CLOB(255) for java strings mapped as type 'text' in .hbm files. I am using the same set of mapping files on Postgres8.3 and Oracle10g. Type 'text' maps nicely to postgres and Oracle as type 'text' and 'CLOB' resp

My idea was to let Hibernate create CLOB(255) columns in Derby, and then I can write an alter column sql to change the CLOB column size. And then run my app on Derby using the same Hibernate mappings.

Seems like i will have to work on quite a few workarounds.

thanks

kashyup


Kristian Waagan-4 wrote:
kashyup wrote:
> Hello all,
> We have just started to look into Derby as our embedded DB for a desktop app
> version.
>
> Env: Hibernate 3.2 and Derby 10.5.1
>
> I have defined a java string field of type 'text' in Hibernate Mapping
> (works great on Postgres 8.1 and Oracle 10g)
>
> I use Hibernate SessionFactory to generate Table schema, which is done
> without any error.
>
> But, when I try to save records in tables via Hibernate Session, I get the
> following exception:
> Note: If I change hibernate mapping to type 'string', then I dont get this
> error:
>
> java.lang.IllegalStateException: No context, unable to determine which
> stream header format to generate
> at
> org.apache.derby.iapi.types.ClobStreamHeaderGenerator.determineMode(Unknown
> Source)
> at
> org.apache.derby.iapi.types.ClobStreamHeaderGenerator.expectsCharCount(Unknown
> Source)
> at org.apache.derby.iapi.types.ReaderToUTF8Stream.fillBuffer(Unknown
> Source)
> at org.apache.derby.iapi.types.ReaderToUTF8Stream.read(Unknown Source)
> at java.io.DataInputStream.read(Unknown Source)
> at org.apache.derby.iapi.types.SQLClob.readExternal(Unknown Source)
> at org.apache.derby.iapi.types.SQLChar.getString(Unknown Source)
> at org.apache.derby.iapi.types.SQLClob.getClone(Unknown Source)
> at org.apache.derby.impl.sql.GenericParameter.getClone(Unknown Source)
> at org.apache.derby.impl.sql.GenericParameterValueSet.<init>(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericParameterValueSet.getClone(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.addBatch(Unknown
> Source)
> at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:31)
> at
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252)
> at
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)
>
> Also, I need to save it as type 'text' even though it gets saved as
> CLOB(255), as the CLOB column size can later be altered.
>
> What could be the cause? or changes needed?
>  
Hello,

You have discovered / triggered a bug in the new Clob handling code
introduced in 10.5.1.
I logged DERBY-4278 [1], and have started working on a fix (the
regression tests are running, patch needs review).

Regarding workarounds, I'm afraid all I can think of is using the client
driver instead of the embedded driver, avoid batching for inserts with
Clobs, change the data type, or downgrade to 10.4. Another option is to
build Derby with the patch and test it out :)
I observe that you are using very small Clobs (255 characters). Clobs
are in general less effective than using for instance VARCHAR.
Is your concern about altering the column size related to Derby,
Hibernate or something else?


Regards,
--
Kristian

[1] https://issues.apache.org/jira/browse/DERBY-4278
> thanks all
>
>
>  

 « Return to Thread: Hibernate + Derby - Unable to determine stream header for hibernate type 'text'