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: BLOB, JAVA, JPA, ORACLE, SQLException.
2 Comentários Add your own
Deixe um comentário
Trackback this post | Subscribe to the comments via RSS Feed
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
2. ovictorpinto | outubro 19, 2012 às 5:26 pm
Essa é a intenção do blog. Formar uma base de conhecimento.
[]’s