Archive for novembro, 2011

JPA + Oracle + Blob

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

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


Calendário

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

Postagens por Mês

Posts por Categoria


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.