Método DAO não consegue salvar a Imagem

0 respostas
wladyband

Minha classe bean já consegue salvar a imagem no meu diretório especifico,eu sei disso porque eu fiz um teste, porém somente falta ele conseguir salvar a String que é o nome do arquivo que faço o FileUpload no banco de dados

Eu vou mostrar parte da entidade produto

@Entity
@Table(name = "tbl_produtos")
@NamedQueries({
    @NamedQuery(name = "Produto.listar", query = "SELECT p from Produto p"),
    @NamedQuery(name = "Produto.Imagem", query = "INSERT INTO Produto (IMAGEM)" + "VALUES(?)"),
    @NamedQuery(name = "Produto.buscarPorCodigo", query = "SELECT p from Produto p where p.codigo = :codigo") })

public class Produto {



private String imagem;

contém outros atributos e também contém os getts e setts do atributo imagem.

esse é a classe bean que estou tentando para gravar a string da imagem no banco

package br.com.drogaria.bean;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.apache.commons.fileupload.FileUpload;
import org.primefaces.model.UploadedFile;

import br.com.drogaria.dao.ProdutoDAO;
import br.com.drogaria.domain.Produto;

@ManagedBean
@SessionScoped
public class FileuploadBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String destination = "C:\\tmp\\";
    private UploadedFile file;
    Produto produto;
    ProdutoDAO produtoDAO = new ProdutoDAO();

    public FileuploadBean() {

    }

    public void TransferFile(String fileName, InputStream in) {
        try {
            OutputStream out = new FileOutputStream(new File(destination
                    + fileName));
            int reader = 0;
            byte[] bytes = new byte[(int) getFile().getSize()];
            while ((reader = in.read(bytes)) != -1) {
                out.write(bytes, 0, reader);
            }
            in.close();
            out.flush();

        } catch (IOException e) {
            System.out.println(e.getMessage());
        }

    }

    public void upload() {
        String extValidate;
        if (getFile() != null) {
            String ext = getFile().getFileName();
            if (ext != null) {
                extValidate = ext.substring(ext.indexOf(".") + 1);
            } else {
                extValidate = "null";
            }

            if (extValidate.equals("jpg") || extValidate.equals("png")) {
                try {
                    TransferFile(getFile().getFileName(), getFile()
                            .getInputstream());
                } catch (IOException ex) {

                    Logger.getLogger(FileUpload.class.getName()).log(
                            Level.SEVERE, null, ex);
                    FacesContext context = FacesContext.getCurrentInstance();
                    context.addMessage(null, new FacesMessage(
                            "Perigo, erro ao fazer Upload do arquivo"));
                }
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Sucesso", getFile()
                        .getFileName()
                        + "seu upload. conteudo"
                        + getFile().getContentType()
                        + "tamanho"
                        + getFile().getSize()));

            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Perigo",
                        "o arquivo tem que ser pdf"));

            }
        } else {

            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(
                    "Perigo, selecione o arquivo"));
        }

        String nomeAquivo = "";
        nomeAquivo = getFile().getFileName();
        System.out.println(destination + "nome do arquivo" + " " + nomeAquivo);
        produto.setImagem(nomeAquivo);
        produtoDAO.gravarImagem(produto);

    }

    public String getDestination() {
        return destination;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }

}

Esse é o pedaço do código que estou com dificuldade

String nomeAquivo = "";
nomeAquivo = getFile().getFileName();
System.out.println(destination + "nome do arquivo" + " " + nomeAquivo);
produto.setImagem(nomeAquivo);
produtoDAO.gravarImagem(produto);

Estou tentando alterar esse método para gravar o nome da imagem no banco, sendo que não estou conseguindo

public Produto gravarImagem(Produto produto) {

        Session sessao = HibernateUtil.getSessionFactory().openSession();
        Produto produtos = null;
        try {

            Query inseri_imagem = sessao.getNamedQuery("Produto.Imagem");
            inseri_imagem.setString(null, produto);

            produtos = (Produto) inseri_imagem.uniqueResult();
        } catch (RuntimeException ex) {
            throw ex;
        } finally {
            sessao.close();
        }
        return produtos;

    }

Estou utilizando um projeto JSF com Hibernate num modelo DAO.

Criado 19 de maio de 2015
Respostas 0
Participantes 1