Olá Pessoal,
Estou com um problemão que à semana semana tentando não resolvo … bom vamos lá …
Conforme a especificação JPA, para salvar devo utilizar um atributo byte[] e anotá-lo com @Lob
model:
...
@Lob
@Column(name="IMAGE_")
@Basic(fetch=FetchType.EAGER)
private byte[] image;
//getter and setter
Daí eu permito ao usuario escolher o item que desejar e o sistema faz o upload do arquivo em um local temp. Faço isso utilizando a tag do ICEFaces ice:inputFile.
Quando o upload é concluido ele me retorna um java.io.File.
Para poder persistir devo converter este File para byte[]
faço isso da seguinte maneira:
[code]
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
byte buffer[] = new byte[4096];
int bytesRead = 0;
FileInputStream fi = new FileInputStream(this.file.getAbsolutePath());
while ((bytesRead = fi.read(buffer))!=-1){
arrayOutputStream.write(buffer,0,bytesRead);
}
arrayOutputStream.close();
fi.close();[/code]
Seto o atributo:
newCiType.setImage(arrayOutputStream.toByteArray());
E chamo o cara que persist:
ICTypeFacadeImpl.create(newCiType);
metodo create:
[code]
public static void create(ConfigurationItemType icType) {
EntityManager em = JPAUtility.getEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.persist(icType);
transaction.commit();
em.close();
}[/code]
Ao termino de tudo isso: Ocorre um erro intermitente (ora sim ora nao):
Caused by: java.sql.SQLException: operação não permitida: streams type cannot be used in batching
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:3999)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.addBatch(WrappedPreparedStatement.java:264)
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:31)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)
... 75 more
Não sei o que é pq ora funfa ora nao funfa … urghhhhhh
Valeu galera