Preciso gravar uma imagem no Banco de Dados usando Hibernate. Procurei por aí (inclusive aqui no GUJ) e todas as soluções dizem para, ao invés de Image, utilizar Byte[]. Por exemplo, em vez de:
O problema dessa solução, na minha opinião, é conceitual: no meu domínio de negócio, meu Cliente (por exemplo) possui uma imagem que representa sua foto, e não um array de bytes.
Alguém tem uma solução mais elegante para esse problema?
Uma imagem é um array de bytes… Um arquivo no computador é armazenado em bytes… Essa a razão de você achar o pessoal usando byte[].
Mero_Aprendiz
Olá.
Porque você não cria dentro do seu Cliente mesmo métodos para transformar esse bytes[] em uma Image?
publicclassCliente{privateImagefoto;publicImagegetFoto(){returnfoto;}publicvoidsetFoto(Imagefoto){this.foto=foto;}@TransientpublicImagegetImagem(){/** * Aqui você transforma o bytes[] em Image **/}publicImagesetImagem(Imageimage){/** * Aqui você transforma o Image em byte[] **/}}
P.S.: Nunca tentei persistir uma imagem sem ser de byte[]. O Hibernate não persiste um image?
[]'s
JL
alanbrasil1984
vou postar um método que tenho que ao colocar ele como href de uma imagem ele busca a imagem no banco e coloca na pag…
publicclassMediaDataimplementsSerializable{privatestaticfinallongserialVersionUID=1L;IntegerWidth=110;IntegerHeight=50;ColorBackground=newColor(0,0,0);ColorDrawColor=newColor(255,255,255);privateStringcaminhoImagem;privateStringimagem="";//File teste = new File("c:\\img\\cachorro.jpg"); publicbyte[]getData()throwsFileNotFoundException{Stringimagem=this.getCaminhoImagem();byte[]buffer=null;if(imagem!=null){try{InputStreamis=newFileInputStream(imagem);buffer=newbyte[is.available()];is.read(buffer);is.close();}catch(IOExceptionex){ex.printStackTrace();}}returnbuffer;}