Hibernate - Não grava no BD (MySQL) [RESOLVIDO]

5 respostas
F

Estou apenas copiando os exemplos mostrados na apostila da caelum (f21).

As classes usadas são essas:

package br.com.caelum.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Produto {
	
	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String descricao;
	private Double preco;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}
	
	

}
package br.com.caelum.hibernate.dao;

import org.hibernate.Session;

import br.com.caelum.hibernate.Produto;

public class ProdutoDAO {

	private Session session;
	
	public ProdutoDAO (Session session) {
	this.session = session;
	}
	public void salva (Produto p) {
	this.session.save(p);
	this.session.flush();
	this.session.close();
	}
	public void remove (Produto p) {
	this.session.delete(p);
	}
	public Produto procura (Long id) {
	return (Produto) this.session.load(Produto.class, id);
	}
	public void atualiza (Produto p) {
	this.session.update(p);
	}
	
}
package br.com.caelum.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
	
	private static SessionFactory factory;
	static {
	AnnotationConfiguration cfg = new AnnotationConfiguration();
	cfg.addAnnotatedClass(Produto.class);
	factory = cfg.buildSessionFactory();
	}
	public Session getSession() {
	return factory.openSession();
	}

}
package br.com.caelum.hibernate;

import org.hibernate.Session;

import br.com.caelum.hibernate.dao.ProdutoDAO;

public class AdicionaProduto {
	
	public static void main(String[] args) {
		
		Produto p = new Produto();
		p.setNome("Fernando");
		p.setDescricao("Alto");
		p.setPreco(100.00);
		
		Session session = new HibernateUtil().getSession();
		ProdutoDAO dao = new ProdutoDAO(session);
		dao.salva(p);
	}

}

Quando eu executo a classe main aparece a mensagem:
Hibernate:
insert
into
Produto
(descricao, nome, preco)
values
(?, ?, ?)

Mais quando vou checar no banco nada foi adicionado
O que estou fazendo de errado? :lol:

5 Respostas

VanHelsing

Tenta assim…

public void salva (Produto p) {
        this.session.beginTransaction();
	this.session.save(p);
        this.session.getTransaction().commit();
	this.session.flush();
	this.session.close();
}
F

VanHelsing:
Tenta assim…

public void salva (Produto p) {
        this.session.beginTransaction();
	this.session.save(p);
        this.session.getTransaction().commit();
	this.session.flush();
	this.session.close();
}


funcionou :smiley:
obrigado pela ajuda !!
[]'s

walterfelipe

Tive a mesma bronca :shock: Valeu mesmo FerTriPa :smiley:

n3too

Pode ser feito assim tbm:

public static void main(String[] args) {  
          
        Produto p = new Produto();  
        p.setNome("Fernando");  
        p.setDescricao("Alto");  
        p.setPreco(100.00);             
        Session session = new HibernateUtil().getSession();  
        ProdutoDAO dao = new ProdutoDAO(session);  
        Transaction tx = session.beginTransaction();
        dao.salva(p);  
        tx.commit();
        session.close();
  }

Assim a sua DAO fica mais "limpa" e mais legível.

I

Tive o mesmo problema.

Valeu!

Criado 24 de março de 2009
Ultima resposta 30 de jun. de 2009
Respostas 5
Participantes 5