Daniel, não é nem problema com o driver, mas sim como o DB trata os dados
binários... Diferentemente dos dados "planos", dados binários você tem que
trabalhar com fluxo de dados... De uma maneira bem grosseira, vai escrever
como se estivesse escrevendo em um fluxo de arquivo convencional... Logo, só
deve realizar o commit quando o fluxo terminar com sucesso. Neste caso, não
é exclusividade do PostgreSQL.

Att,


2009/7/23 Daniel Henrique Joppi <[email protected]>

> Charly,
>
> Obrigado pelo retorno. Vou dar uma analisada melhor no hibernate, talvez
> tenhamos que fazer algumas modificações nele.
> Não temos como remove-lo pois é o utilizamos a muito tempo, e agora quando
> fomos atualizar a versão de outro banco notamos o mesmo problema com campos
> binários.
>
> Mas voltando ao Postgres notei que na própria API de conexão não me deixa
> enviar meu dados se tiver com o AutoComit:
>
> na classe *org.postgresql.largeobject.LargeObjectManager*
>
> *public *LargeObject open(long oid, int mode) *throws *SQLException
>     {
>         *if* (conn.getAutoCommit())
>             *throw new* PSQLException(GT.tr("Large Objects may not be used
> in auto-commit mode."),
>                                     PSQLState.*NO_ACTIVE_SQL_TRANSACTION*
> );
>         *return new *LargeObject(fp, oid, mode);
>     }
>
> então não seria só problema do hibernate, mas sim do driver de conexão
> também? Alguém tem idéia o porque disso?
>
>
> On Thu, Jul 23, 2009 at 4:14 PM, Charly Frankl <[email protected]> wrote:
>
>> Daniel,
>>
>> Campos binários em geral são um problema dentro do hibernate (vou ser
>> sincero, não gosto muito de ORM's ... rsss).... Segue um exemplo simples
>> utilizando JDBC direto, que acho bem mais simples...
>>
>> File file = new File("myimage.gif");
>> FileInputStream fis = new FileInputStream(file);
>> PreparedStatement ps = conn.prepareStatement("INSERT INTO images VALUES
>> (?, ?)");
>> ps.setString(1, file.getName());
>> ps.setBinaryStream(2, fis, (int)file.length());
>> ps.executeUpdate();
>> ps.close();
>> fis.close();
>>
>> Para maiores detalhes, dá uma olhada em
>> http://jdbc.postgresql.org/documentation/80/binary-data.html
>>
>> Att,
>>
>>
>> --
>> Charly Frankl
>> http://javadevilopers.blogspot.com/
>> [email protected]
>> Linux user #391083
>>
>>
>>
>> 2009/7/23 Daniel Henrique Joppi <[email protected]>
>>
>>>  adicionei a propriedade <property name="defaultAutoCommit" value="false"
>>> /> como sugerido em outros tópicos na internet ...
>>>
>>> alguém conhece uma outra maneira?
>>>
>>> On Wed, Jul 22, 2009 at 9:46 AM, Daniel Henrique Joppi <
>>> [email protected]> wrote:
>>>
>>>> Bom dia,
>>>>
>>>> Estou com problemas ao tentar inserir um array de bytes em um campo do
>>>> tipo oid.
>>>>
>>>> org.springframework.jdbc.UncategorizedSQLException: Hibernate operation:
>>>> could not insert: [com.norxs.mama.MyMessage]; uncategorized SQLException 
>>>> for
>>>> SQL [insert into public.MyMessage (isProtocol, domain, sourceID, service,
>>>> flow, priority, status, createdOn, message, props, uniqueid, messageType,
>>>> nrDoc, fromPartner, toPartner, messageSize, billingTo, processedOn, 
>>>> billing,
>>>> groupType, messageIdKey) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
>>>> ?, ?, ?, ?, ?, ?, ?)]; SQL state [25P01]; error code [0]; Objetos Grandes
>>>> não podem ser usados no modo de efetivação automática (auto-commit).; 
>>>> nested
>>>> exception is org.postgresql.util.PSQLException: Objetos Grandes não podem
>>>> ser usados no modo de efetivação automática (auto-commit).
>>>>     at
>>>> org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:121)
>>>>     at
>>>> org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:639)
>>>>     at
>>>> com.norxs.mama.DBPersistence.messageArrived(DBPersistence.java:411)
>>>>     at
>>>> com.norxs.mama.jbi.ReceiverLegacyMonoComponent.poll(ReceiverLegacyMonoComponent.java:98)
>>>>     at
>>>> org.apache.servicemix.components.util.PollingComponentSupport.run(PollingComponentSupport.java:65)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>>>     at java.lang.Thread.run(Thread.java:619)
>>>> Caused by: org.postgresql.util.PSQLException: Objetos Grandes não podem
>>>> ser usados no modo de efetivação automática (auto-commit).
>>>>     at
>>>> org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:241)
>>>>     at
>>>> org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:228)
>>>>     at
>>>> org.postgresql.jdbc2.AbstractJdbc2Statement.setBlob(AbstractJdbc2Statement.java:2851)
>>>>     at
>>>> org.apache.commons.dbcp.DelegatingPreparedStatement.setBlob(DelegatingPreparedStatement.java:181)
>>>>     at org.hibernate.type.BlobType.set(BlobType.java:49)
>>>>     at org.hibernate.type.BlobType.nullSafeSet(BlobType.java:117)
>>>>     at
>>>> org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2002)
>>>>     at
>>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2248)
>>>>     at
>>>> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)
>>>>     at
>>>> org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60)
>>>>     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
>>>>     at
>>>> org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
>>>>     at
>>>> org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
>>>>     at
>>>> org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
>>>>     at
>>>> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
>>>>     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
>>>>     at
>>>> org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)
>>>>     ... 7 more
>>>>
>>>> --
>>>> [ ]'s
>>>> Daniel Henrique Joppi
>>>>
>>>> msn: [email protected]
>>>> gtalk: [email protected]
>>>> skype: daniel.joppi
>>>>
>>>
>>>
>>>
>>> --
>>> [ ]'s
>>> Daniel Henrique Joppi
>>>
>>> msn: [email protected]
>>> gtalk: [email protected]
>>> skype: daniel.joppi
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> [ ]'s
> Daniel Henrique Joppi
>
> msn: [email protected]
> gtalk: [email protected]
> skype: daniel.joppi
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Charly Frankl
http://javadevilopers.blogspot.com/
[email protected]
Linux user #391083
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a