[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