Srs. Bom dia,
Estou encontrando uma dificuldade enorme em salvar imagens no meu banco de dados, estou usando - Netbeans 6.8 + Hibernate + Postgress, segue abaixo o código que estou usando, ocorre que quando consulto o banco os dados cadastrados não passam de 6 ou 7 caracteres.
Peço por gentileza caso possam ajudar, já perdi um bom tempo nisso patinando nisso e não saio do lugar.
------ trecho da minha classe -------
[code]
private void gravaEmpresa() throws FileNotFoundException{
if (listEmpresas.size() == 0){
try {
//Chama o método pra adicionar todos os dados padrões no sistema,
//já que é a primeira entrada do sistema.
carrega();
//Cria uma empresa padrão
empresas = new Empresa();
empresas.setId(Long.parseLong("1"));
empresas.setNomeFantasia("SIGSESMT");
//Ler a imagem do caminho especificado
logomarca = ImageIO.read(new File("C:/1.jpg"));
//OBTEM A IMAGEM E TRANSFORMA EM BYTES[]
ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
ImageIO.write((BufferedImage) logomarca, "jpg", bytesImg); //seta a imagem para bytesImg
bytesImg.flush(); //limpa a variável
byte[] byteArray = bytesImg.toByteArray(); //Converte ByteArrayOutputStream para byte[]
bytesImg.close(); //fecha a conversão
empresas.setLogomarca(byteArray); //erro no banco ... ou no DAO
empresaDAO.saveOrUpdate(empresas);
//Cria Outros atributos padrões
JOptionPane.showMessageDialog(this, "Entre em cadastros para cadastrar sua empresa!", "Bem Vindo", JOptionPane.PLAIN_MESSAGE);
} catch (IOException ex) {
Logger.getLogger(FormLogin.class.getName()).log(Level.SEVERE, null, ex);
}
} else{
setVisible(true);
usuarios = null;
}
}[/code]
-------------meu DAO------------
package dao;
import entidades.Empresa;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import util.Banco;
public class EmpresaDAO {
//Cria um novo objeto de entidade.
EntityManager em;
//Cria um objeto para fazer as consultas.
Query q;
//Construtor da classe que já instacia os objetos para acesso ao banco.
public EmpresaDAO() {
//Objeto de entidade recebe um objeto de entidade real do banco, através da classe Banco.
em = Banco.getInsatance().getEntityManager();
//Cria um objeto para manipular as consultas no banco.
q=em.createQuery("FROM Empresa forn order by forn.nomeFantasia");
}
//Método que faz consulta ao banco de dados através do ID passado como parâmetro.
public Empresa get(Long id){
em.clear();
em.getTransaction().begin();
Empresa forn =em.find(Empresa.class,id);
em.getTransaction().commit();
return forn;
}
//Cria uma consulta de Empresa, e retorna em uma lista de Empresas.
public List<Empresa> select(){
em.clear();
em.getTransaction().begin();
List lista=em.createQuery("FROM Empresa forn order by forn.nomeFantasia").getResultList();
em.getTransaction().commit();
return lista;
}
//Busca de Fornecedores, passando uma lista de fornecedores, e um filtro passado como parâmetro.
public List<Empresa> select(String filtro){
em.clear();
em.getTransaction().begin();
String hsql;
hsql = "FROM Empresa forn ";
hsql += "Where ";
hsql += "forn.nomeFantasia like :filtro ";
hsql += "OR forn.endereco like :filtro ";
Query query = em.createQuery(hsql);
query.setParameter("filtro", filtro + "%");
List lista=query.getResultList();
em.getTransaction().commit();
return lista;
}
//Método para salvar Empresa. Passa um objeto Empresa como parâmetro.
public void saveOrUpdate(Empresa forn){
em.clear();
em.getTransaction().begin();
em.merge(forn);
em.getTransaction().commit();
}
//Método para deletar Empresa. Passa um objeto Empresa como parâmetro.
public void delete(Empresa forn ){
em.clear();
em.getTransaction().begin();
forn = em.find(Empresa.class,forn.getId());
if (forn!=null){
em.remove(forn);
}
em.getTransaction().commit();
}
public Empresa select(int varlogoempresa) {
em.clear();
em.getTransaction().begin();
Empresa forn =em.find(Empresa.class,varlogoempresa);
em.getTransaction().commit();
return forn;
}
}
-----------Minha entidade-----------
*subtrai os outros get/set para ficar mais limpo
package entidades;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Empresa implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String nomeFantasia;
@Lob
@Column(name = "logomarca")
private byte[] logomarca;
public Empresa() {
}
public Logomarca getLogomarca () {
return logomarca;
}
public void setLogomarca (Logomarca logomarca) {
this.logomarca= logomarca;
}
//tambem usei
/*
public byte[] getLogomarca () {
return logomarca;
}
public void setLogomarca (byte[] logomarca) {
this.logomarca= logomarca;
}*/
public String getNomeFantasia() {
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* Retorna um valor de codigo hash para o objeto. Esta implementcao computa
* um valor de c�digo hash baseado nos campos id deste objeto.
* @return um valor de c�digo hash para este objeto.
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.id != null ? this.id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Empresa)) {
return false;
}
Empresa other = (Empresa)object;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;
return true;
}
/**
* Retorna uma representa��o literal deste objeto. Esta implementa��o cria
* uma representa��o baseada nos campos id.
* @return uma representa��o literal deste objeto.
*/
@Override
public String toString() {
//return "classes.Empresa[id=" + id + "]";
return nomeFantasia;
}
}