[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5659) Problem using Hibernate3.6.0.Final with CLOB field in Oracle.

Gail Badner (JIRA) noreply at atlassian.com
Thu Dec 23 22:53:06 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39426#action_39426 ] 

Gail Badner commented on HHH-5659:
----------------------------------

I've been testing with Oracle 10g and I can confirm that hibernate.jdbc.use_streams_for_binary=true fixes MaterializedBlob and MaterializedClob.

Reading/writing (Java) Blob/Clob properties is broken though, regardless of the how hibernate.jdbc.use_streams_for_binary is set.

With hibernate.jdbc.use_streams_for_binary=false, you get:

    java.lang.ClassCastException: $Proxy3 cannot be cast to oracle.sql.BLOB

With hibernate.jdbc.use_streams_for_binary=true, you get:

    org.hibernate.HibernateException: Unknown unwrap conversion requested: 
    java.sql.Blob to org.hibernate.type.descriptor.BinaryStream

Would it break anything to change java.BlobTypeDescriptor.unwrap( value, BinaryStream.class, options ) to return a BinaryStream instead of throwing an exception? Also, change java.ClobTypeDescriptor.unwrap( value, CharacterStream.class, options ) to return a CharacterStream?

As far is the difficulty with setting hibernate.jdbc.use_streams_for_binary in the proper context and to get around the "globalness", would it be acceptable to change how WrapperOptions.useStreamForLobBinding() is defined in AbstractStandardBasicType to take the dialect into account? 

For example, it could check if hibernate.jdbc.use_streams_for_binary was explicitly set to "true" or "false"; if it was not explicitely set, then call session.getFactory().getDialect().useInputStreamToInsertBlob() to determine if streams should be used for binding LOBs. 

For Oracle, it should return true; for Postgresql, it should return false.

Steve, what do you think?

> Problem using Hibernate3.6.0.Final with CLOB field in Oracle.
> -------------------------------------------------------------
>
>                 Key: HHH-5659
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5659
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.6.0
>         Environment: Hibernate 3.6.0.Final, Database Oracle10G on Linux X64, and JPA
>            Reporter: Samuel Rettore
>            Priority: Minor
>         Attachments: createClob_Deprecated.png, Hibernate_createClob_Deprecated.png, LobHelper_Interface.png, Srhlog.java
>
>
> When migrating my project that works well with Hibernate 3.5.6 End-to 3.6.0.Final the Clob field displays the following error 
> |java.lang.ClassCastException: $Proxy1119 cannot be cast to oracle.sql.CLOB
>         at oracle.jdbc.driver.OraclePreparedStatement.setClob(OraclePreparedStatement.java:7021)
>         at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$1.doBind(ClobTypeDescriptor.java:60)
>         at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:89)
>         at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282)
>         at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277)
>         at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:85)
>         at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2166)
>         at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2412)
>         at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2856)
>         at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
>         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
>         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
>         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
>         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
>         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
>         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
>         at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:795)
>         at com.sun.enterprise.container.common.impl.EntityManagerWrapper.flush(EntityManagerWrapper.java:407)
> ---
> This error appears only with CLOB field.
> to get more information at their disposal.
> Thanks
> Rettore.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list