Hibernate + Blob + Oracle

Aeee…
Sei que o assunto ja está batido, mas mesmo assim, não consigo fazer isso funcionar… Ja consultei várias soluções e nenhuma ajudou na minha…
Vou mostrar o que tenho, e se alguem tiver alguma luz, agradeço.

Banco de dados Oracle 9i, a coluna está criada como BLOB.
O Hibernate é o 3.

A Entidade:

    @Type(type="binary")
    @Basic(fetch = FetchType.LAZY)
    @Column(name = "ARQUIVO_BLOB")
    private byte[] arquivo;

Isso gera o erro:

21/08/08 11:35:27  INFO type.BinaryType:182 nullSafeGet - could not read column value from result set: ARQUIVO2_4_27_; Stream já foi fechado
21/08/08 11:35:27  WARN util.JDBCExceptionReporter:77 logExceptions - SQL Error: 17027, SQLState: null
21/08/08 11:35:27 ERROR util.JDBCExceptionReporter:78 logExceptions - Stream já foi fechado
21/08/08 11:35:27  INFO def.DefaultLoadEventListener:111 onLoad - Error performing load command
org.hibernate.exception.GenericJDBCException: could not load an entity: [xx.xxx.xxxxxxx.xxxxxxxxx#2]
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1874)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

Já tentei trocar a coluna pelo tipo BLOB tb… Mas dá erro que nao possui o método getBlob implementado pelo JDBC…

Bem, se alguem tiver mais alguma ideia, manda ai… Valeu…

Trocando pro type=“blob” gera o erro:

21/08/08 15:28:41  WARN util.JDBCExceptionReporter:77 logExceptions - SQL Error: 17004, SQLState: null
21/08/08 15:28:41 ERROR util.JDBCExceptionReporter:78 logExceptions - Tipo de coluna inválido: getBLOB not implemented for class oracle.jdbc.driver.T4CLongRawAccessor

Qual a versão do jdbc? Eu peguei um erro parecido (não era a mesma exception) e era por causa do driver jdbc… atualize para o mais atual possivel que englobe a sua versão de banco…

Done. Mas deu na mesma… Pequei a versão do ojdbc14.jar = 10.2.0.4 (é a ultima)…

Eu vi que podia ser esse o problema tb… troquei e nada, continua dando a maldita mensagem de erro… =/

Ahhh sei lá… desisti…

Passei a fazer a query direta pelo SQL nativo mesmo…
Mas precisei fazer uma volta danada pra recuperar do banco como byte[].
Isso aqui me ajudou bastante:

http://www.hibernate.org/50.html

e gerei a query assim:

Bytes o = (Bytes)getSession().createSQLQuery(
            "select ARQUIVO_BLOB from TABELA t where t.ID = ?")
            .addScalar("ARQUIVO_BLOB", Hibernate.custom(BytesType.class))
            .setInteger(0, param.getId())
            .uniqueResult();