Problemas com hibernate blob oracle

4 respostas
R

Ola,

Estou com problemas para persisitr objetos no oracle um uma coluna do tipo blob usando hibernate.
O procedimento funcionava normalmente usando postgres, porem com no oracle nao funciona.
Eu difini o tipo to campo como blob no arquivo *.hbm.xml e na classe eu defini como array de bytes, eu tb tentei definir como java.sql.blob e mesmo assim o erro continuou.
Eu achei varios artigos na internet sobre blob e hibernate, mas parece que são para o hibernate antes da versao da 3, e eu estou o hibernate na versao 3

Desde ja muito obrigado

Segue abaixo como eu estou procedendo

public class Beta {

	private Session session;

	private void startHibernate() {
		Configuration cfg = new Configuration().addResource("br/com/verano/Teste.hbm.xml")
			.setProperty("hibernate.connection.driver_class","oracle.jdbc.driver.OracleDriver")
			.setProperty("hibernate.connection.url","jdbc:oracle:thin:@sm01:1523:tsor10")
			.setProperty("hibernate.connection.username", "portexec")
			.setProperty("hibernate.connection.password", "portexec")
			.setProperty("hibernate.dialect", "org.hibernate.dialect.OracleDialect")
			.setProperty("hibernate.cache.provider_class","org.hibernate.cache.OSCacheProvider")
			.setProperty("hibernate.show_sql", "true")
			.setProperty("hibernate.format_sql", "false")
			.setProperty("hibernate.cache.provider_class","org.hibernate.cache.EhCacheProvider");
		SessionFactory sessions = cfg.buildSessionFactory();
		session = sessions.openSession();
	}

	public void makePersistent() throws Exception {
		startHibernate();
		Transaction transaction = session.beginTransaction();
		
		Teste entity = new Teste();
		entity.setPk(1);
		entity.setNome("file1");
		entity.setMyfile(ImagemUtil.fileToBlob(new File("c:/devicetable.log")));

		session.update(entity);
		transaction.commit();
	}

	public static void main(String args[]) {
		try {
			new Beta().makePersistent();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

public class Teste {
	private long pk;
	private String nome = null;  
	private Blob myfile = null;
}

<hibernate-mapping>
    <class name="br.com.verano.Teste" table="teste">
    	<id name="pk" type="long">
            <column name="pk" />
            <generator class="assigned"></generator>
        </id>
        
        <property name="nome" type="string">
            <column name="nome" not-null="true" />
        </property>
        
        <property name="myfile" type="blob">
            <column name="myfile"/>
        </property>
        
    </class>
</hibernate-mapping>

public class ImagemUtil {

	public static byte[] fileToByte(File imagem) throws Exception {
		FileInputStream fis = new FileInputStream(imagem);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		byte[] buffer = new byte[8192];
		int bytesRead = 0;
		while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
			baos.write(buffer, 0, bytesRead);
		}
		return baos.toByteArray();
	}

	public static InputStream byteToInputStream(byte[] bytes) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
		return bais;
	}
	
	public static Blob fileToBlob(File file) throws Exception{
		byte[] fileInByte = fileToByte(file);
		return Hibernate.createBlob(fileInByte);
	}

}

4 Respostas

esb

ronildobraga,

Problemas envolvendo Hibernate x Blob x Oracle já são bem conhecidos e dão uma boa dor de cabeça. Não sei se nessa versão nova corrigiram, mas até a versão anterior, o problema estava no Oracle mesmo, mais especificamente no driver. Bem, estou falando de um problema específico.

Tente especificar melhor o seu, pra termos uma idéia de como ajudá-lo!

Abraço!
Eduardo

muldon

estou com o mesmo problema… se resolver poste ok ? eu farei o mesmo.

muldon

resolvi o problema trocando a lib do oracle para a 10.0.2.0. No tipo do meu objetivo uso Blob mesmo, dai trata-se como se fosse uma propriedade normal.
No mapeamento:




No V.O.

Blob file; + get and set

Tudo utilizando hibernate 3.2. O problema meu que nao gravava era por causa do driver.

cubas

Olá.
Estou precisando o contrário, ler um arquivo de imagem de um campo Blob do oracle.
Vc sabe como fazer isto.
Estou usando hibernate 3 e anotations.
Obrigado

Carlos Cubas

Criado 28 de junho de 2007
Ultima resposta 8 de set. de 2008
Respostas 4
Participantes 4