Upload de Imagem como Blob usando Hibernate e JSF 2

10 respostas
F

Ai pessoal, tenho uma aplicação que estou desenvolvendo utilizando Hibernate e JSF 2, tenho que fazer o upload de imagens em um campo BLOB, como faço o mapeamento dele no hibernate com Annottations?

Também não faço ideia de como vai ficar o Managed Bean para fazer o upload desse arquivo, o que posso usar?

Outra coisa, qual componente do JSF posso usar para fazer o upload da imagem ?

Também uso Richfaces, caso alguém conheça algo dele que possa ajudar.

ManagedBean que grava e exclui os dados no banco

@ManagedBean
public class GravaSalesianos {

    private Integer sal_id;
    private Integer pes_id;
    private Integer cat_id;
    private Integer est_id;
    private String sal_site;
    private String sal_email_institucional;
    private String sal_unimed;
    private String sal_titulo_honorifico;
    private String sal_hobby;
    private String sal_dados_biograficos;
    private String sal_apelido;
    private String sal_linguas;
    private Date sal_data_falecimento;
    private String sal_local_falecimento;    
    private String sal_pais_falecimento;
    private String sal_local_enterro;

    private Session sessao = CriadorDeSessaoNovo.getSession();
    private Transaction tx = sessao.beginTransaction();

    public List<Salesianos> getSalesianos(){
        Session sessao = CriadorDeSessaoNovo.getSession();
        Criteria listagem_query = sessao.createCriteria("br.salesianos.modelo.Salesianos").
                createAlias("pessoas", "pe").
                addOrder(Order.asc("pe.pes_nom_completo"));
        List<Salesianos> lista = (listagem_query.list());
        sessao.close();
        return lista;
    }

    public void limpante() {
        this.setSal_id(null);
        this.setPes_id(null);
        this.setCat_id(null);
        this.setEst_id(null);
        this.setSal_site(null);
        this.setSal_email_institucional(null);
        this.setSal_unimed(null);
        this.setSal_titulo_honorifico(null);
        this.setSal_hobby(null);
        this.setSal_dados_biograficos(null);
        this.setSal_apelido(null);
        this.setSal_linguas(null);
        this.setSal_data_falecimento(null);
        this.setSal_local_falecimento(null);        
        this.setSal_pais_falecimento(null);
        this.setSal_local_enterro(null);
    }

    public void gravar() {
        try {
            Categoria obj_cat = new Categoria();
            obj_cat.setCat_id(getCat_id());

            Estado obj_est = new Estado();
            obj_est.setEst_id(est_id);

            Pessoas obj_pes = new Pessoas();
            obj_pes.setPes_id(getPes_id());

            Salesianos obj_sal = new Salesianos();

            if (getSal_id() != 0) {
                obj_sal.setSal_id(getSal_id());
            }
            if (!getSal_unimed().equals("")) {
                obj_sal.setSal_unimed(getSal_unimed());
            }
            
            if (!getSal_titulo_honorifico().equals("")) {
                obj_sal.setSal_titulo_honorifico(AlteraLetras.retornaFrase(getSal_titulo_honorifico()));
            }
            if (!getSal_local_enterro().equals("")) {
                obj_sal.setSal_local_enterro(AlteraLetras.retornaFrase(getSal_local_enterro()));
            }
            if (!getSal_site().equals("")) {
                obj_sal.setSal_site(getSal_site());
            }
            if (!getSal_pais_falecimento().equals("")) {
                obj_sal.setSal_pais_falecimento(AlteraLetras.retornaFrase(getSal_pais_falecimento()));
            }
            if (!getSal_local_falecimento().equals("")) {
                obj_sal.setSal_local_falecimento(AlteraLetras.retornaFrase(getSal_local_falecimento()));
            }
            if (!getSal_linguas().equals("")) {
                obj_sal.setSal_linguas(AlteraLetras.retornaFrase(getSal_linguas()));
            }
            if (!getSal_hobby().equals("")) {
                obj_sal.setSal_hobby(AlteraLetras.retornaFrase(getSal_hobby()));
            }
            if (!getSal_email_institucional().equals("")) {
                obj_sal.setSal_email_institucional(getSal_email_institucional());
            }
            if (!getSal_dados_biograficos().equals("")) {
                obj_sal.setSal_dados_biograficos(AlteraLetras.retornaFrase(getSal_dados_biograficos()));
            }
            if (!getSal_apelido().equals("")) {
                obj_sal.setSal_apelido(AlteraLetras.retornaFrase(getSal_apelido()));
            }
            
            obj_sal.setSal_data_falecimento(getSal_data_falecimento());

            //verifica se salesiano faleceu em algum estado
            if (getEst_id() != 0) {
                obj_sal.setEstado(obj_est);
            }
            
            obj_sal.setPessoas(obj_pes);
            obj_sal.setCategoria(obj_cat);

            sessao.saveOrUpdate(obj_sal);
            tx.commit();
            sessao.close();
            limpante();
            FacesContext.getCurrentInstance().addMessage("FormSalesianos:gravar", new FacesMessage("Informações gravadas com sucesso!"));

        } catch (Exception erro) {
            System.out.println("Erro na insersão : " + erro);
            tx.rollback();
            sessao.close();
            FacesContext.getCurrentInstance().addMessage("FormSalesianos:gravar", new FacesMessage("Falha ao gravar informações!"));
        }
    }

    public void excluir() {
        try {

            Pessoas obj_pes = new Pessoas();
            obj_pes.setPes_id(getPes_id());

            Salesianos obj_sal = new Salesianos();

            obj_sal.setSal_id(getSal_id());

            sessao.delete(obj_sal);
            tx.commit();
            sessao.close();
            limpante();
            FacesContext.getCurrentInstance().addMessage("FormSalesianos:excluir", new FacesMessage("Informações excluídas com sucesso!"));

        } catch (Exception erro) {
            System.out.println("Erro na insersão : " + erro);
            tx.rollback();
            sessao.close();
            FacesContext.getCurrentInstance().addMessage("FormSalesianos:excluir", new FacesMessage("Falha ao excluir informações!"));
        }
    }

10 Respostas

henriqueluz

Cara, só uma perguntinha.
Você necessariamente tem que armazenar essa imagem no seu BD?

Abs,

R

Já fiz isso usando rich:fileUpload.

No banco gravava apenas o caminho da imagem,e dentro da aplicação armazenava os arquivos.

E como o nosso amigo comentou,veja se não é viável armazenar no banco somente o caminho da imagem.

F

Eu estou tentando gravar diretamente a imagem no banco, mas caso eu nao conseguisse, eu iria fazer o upload da imagem e criar um campo String com o caminho da imagem, mas gostaria de aprender a usar blob, pois nunca se sabe quando vai aparecer uma situação em que seja obrigatório o uso de componente.

R

Comece pelo caminho mais fácil(gravando só o caminho) e depois vc incrementa.

F

Mesmo tentando por esse caminho, inserindo somente o caminho da imagem, o usuário teria que fazer o upload da imagem, qual componente posso usar para tal.

E outro problema depois, o próprio usuário teria que inserir o caminho, e nesse caso ficaria ruim, pois os usuários do sistema, na maioria são leigos.

R

fabiobh:
Mesmo tentando por esse caminho, inserindo somente o caminho da imagem, o usuário teria que fazer o upload da imagem, qual componente posso usar para tal.

E outro problema depois, o próprio usuário teria que inserir o caminho, e nesse caso ficaria ruim, pois os usuários do sistema, na maioria são leigos.

O componente é o rich:fileUpload mesmo:

<rich:fileUpload  
                immediateUpload="true"  
                addControlLabel="Enviar imagem"  
                listHeight="50"                 
                fileUploadListener="#{controller.fileUploadListener}" />
public void fileUploadListener(UploadEvent event)  
  {  
      File uploadedFile = event.getUploadItem().getFile();  
      //faz algo com o arquivo  
  }
R

E muda o nome dessas variáveis.O que é mais legivel?

Isso:

Categoria obj_cat = new Categoria();  
            obj_cat.setCat_id(getCat_id());  
  
            Estado obj_est = new Estado();  
            obj_est.setEst_id(est_id);  
  
            Pessoas obj_pes = new Pessoas();  
            obj_pes.setPes_id(getPes_id());

Ou isso?

Categoria categoria = new Categoria();  
            categoria.setId(getId());  
  
            Estado estado = new Estado();  
            estado.setId(id);  
  
            Pessoa pessoa = new Pessoa();  
            pessoa.setId(getPessoaId());
F

Eu uso o richfaces 4, acho q vc deve usar o richfaces 3, pois nenhum deste atributos existia no rich:fileUpload do richfaces 4

immediateUpload="true"    
addControlLabel="Enviar imagem"    
listHeight="50"

Incluindo tbm o listener ‘UploadEvent’ tem outro nome, no Richfaces 4 chama-se ‘FileUploadEvent’

Mas ta de boa, to conseguindo, agora porem tenho uma duvida

o event so pode ser usado com:

event.getUploadedFile().getData();
//ou
event.getUploadedFile().getInputStream();

Não tem getFile, como posso tratar o recebimento desse arquivo

Com relação ao nome das variavéis vc tem razão, é mais légivel mesmo, porém como o sistema ja ta quase em fase de produção, alterar todas as variaveis daria muito trabalho, mas sem duvida, no próximo sistema que eu criar, vou criar usando as suas recomendações

R

fabiobh:
Eu uso o richfaces 4, acho q vc deve usar o richfaces 3, pois nenhum deste atributos existia no rich:fileUpload do richfaces 4

immediateUpload="true"    
addControlLabel="Enviar imagem"    
listHeight="50"

Incluindo tbm o listener ‘UploadEvent’ tem outro nome, no Richfaces 4 chama-se ‘FileUploadEvent’

Mas ta de boa, to conseguindo, agora porem tenho uma duvida

o event so pode ser usado com:

event.getUploadedFile().getData();
//ou
event.getUploadedFile().getInputStream();

Não tem getFile, como posso tratar o recebimento desse arquivo

Com relação ao nome das variavéis vc tem razão, é mais légivel mesmo, porém como o sistema ja ta quase em fase de produção, alterar todas as variaveis daria muito trabalho, mas sem duvida, no próximo sistema que eu criar, vou criar usando as suas recomendações

Realmente eu tava usando o RichFaces versão 3,mas na 4 deve ter tbm algum metodo semelhante ao getFile(),dá uma olhada nos docs.

F

Procurei mas nao consegui encontrar os docs que falam sobre metodos do Richfaces!!!

Criado 9 de agosto de 2011
Ultima resposta 10 de ago. de 2011
Respostas 10
Participantes 3