JPA + Oracle + Blob

novembro 22, 2011 at 2:58 pm 2 comentários

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 Inserindo & (E comercial) no oracle

2 Comentários Add your own

  • 1. Douglas Ribeiro  |  outubro 19, 2012 às 5:11 pm

    cara eu tava passando por esse problema.
    Valeu mesmo, resolveu aqui tb, extamente a mesma coisa

    Responder
    • 2. ovictorpinto  |  outubro 19, 2012 às 5:26 pm

      Essa é a intenção do blog. Formar uma base de conhecimento.
      []’s

      Responder

Deixe um comentário

Trackback this post  |  Subscribe to the comments via RSS Feed


Agenda

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

Most Recent Posts