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.