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

Gail Badner (JIRA) noreply at atlassian.com
Wed Feb 2 18:13:07 EST 2011


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

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

I've committed a fix to git hibernate-core 3.6 branch.

It results in a change in how types are overriden.

The "default" LOB types use streams for binding LOBs if WrapperOptions.useStreamForLobBinding() returns true (i.e., when hibernate.jdbc.use_streams_for_binary=true)

Type overrides are done in the following order:

1) Dialect automatically overrides the "default" LOB types with "stream-binding" types if dialect.useInputStreamToInsertBlob() returns true.

NOTE: Currently, Dialect will override the "default" LOB types with "stream-binding" types for all dialects except PostgreSQL. This is because Dialect.useInputStreamToInsertBlob() currently returns true; only PostgreSQL overrides it to return false. 

2) A Dialect can override a type or restore the "default" via addTypeOverride(BasicType typeOverride)

For example, PostgreSQLDialect overrides the current MaterializedBlobType setting with the "lob-binding" type using:
addTypeOverride( MaterializedBlobType.INSTANCE.getAlternatives().getLobBindingType() )

For example, a dialect can restore the "default" BlobType setting using:
addTypeOverride( BlobType.INSTANCE.getAlternatives().getDefaultType() )

3) Configuration.registerTypeOverride(...) can override a type or restore the "default"

With this fix, the value for hibernate.jdbc.use_streams_for_binary is only used for "default" LOB types (that haven't been overriden).

Steve, is this change acceptable for 3.6.1? 

 

> Problem using Hibernate3.6.0.Final with BLOB and CLOB fields 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
>            Assignee: Gail Badner
>            Priority: Minor
>             Fix For: 3.6.1
>
>         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