JPA + Oracle + Blob

novembro 22, 2011 at 2:58 pm Deixe um comentário

Estava precisando fazer um pequeno teste de campo blob com JPA no Oracle.
A atividade aparentemente é fácil, porém fiquei um dia inteiro pra fazê-la.
Segue os passos:

Tabela no oracle:
CREATE TABLE “TESTE_BLOB”
( “ID” NUMBER(6,0) NOT NULL ENABLE,
“IMAGEM” BLOB NOT NULL ENABLE,
“DESCRICAO” VARCHAR2(255 BYTE),
“NOME” VARCHAR2(50 BYTE),
CONSTRAINT “TESTE_BLOB_PK” PRIMARY KEY (“ID”) ENABLE
)

Entidade TesteBlob

@Entity(name = "TesteBlob")
@Table(name = "TESTE_BLOB")
public class TesteBlobTO {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(generator = "SequenceGenerator")
@SequenceGenerator(name = "SequenceGenerator", sequenceName = "SQ_TESTE_BLOB", initialValue = 1)
@Column(name = "ID")
private java.lang.Integer id;

@Column(name = "IMAGEM")
@Lob
@Basic(fetch=FetchType.LAZY)
private byte[] imagem;

@Column(name = "DESCRICAO")
private java.lang.String descricao;

@Column(name = "NOME")
private java.lang.String nome;

/* ... */

}

Até ai estava funcionando para arquivos de até 2kb. Quando tentava colocar um arquivo maior que isso ele dava os seguintes erros:

WARN [JDBCExceptionReporter] SQL Error: 17090, SQLState: null
ERROR [JDBCExceptionReporter] operação não permitida: streams type cannot be used in batching
ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
Caused by: java.sql.SQLException: operação não permitida: streams type cannot be used in batching

Googlando por aí acabei achando uma solução, incluir no arquivo persistence.xml com a seguinte tag:

<property name=”hibernate.jdbc.batch_size”>0</property>

Ele aceitou arquivos com mais de 2k, mas quando tentava inserir arquivos com mais de 3kb ele dava um novo erro:

WARN [JDBCExceptionReporter] SQL Error: 1460, SQLState: 72000
ERROR [JDBCExceptionReporter] ORA-01460: unimplemented or unreasonable conversion requested

ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [testeblob.dataaccess.to.TesteBlobTO]

Caused by: java.sql.SQLException: ORA-01460: unimplemented or unreasonable conversion requested

Depois de ler caçar em vários lugares pela solução, vi um lugar sugerindo atualizar o driver da oracle. PErcebi que eu estava usando um driver antigo (ojdbc14.jar, mas vi gente usando um mais antigo ainda classes12.jar), troquei para
ojdbc5.jar (porque aqui ainda está com java 5, para java 6 tem o ojdbc6.jar) e tudo funcionou lindo e perfeitamente.

[]‘s

Entry filed under: BD, JPA, oracle. Tags: , , , , .

Quebrando páginas com JSF

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Enviar trackback para este post  |  Subscribe to the comments via RSS Feed


Calendário

novembro 2011
S T Q Q S S D
« mar    
 123456
78910111213
14151617181920
21222324252627
282930  

Most Recent Posts


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.