Hibernate, funcao delete

4 respostas
R

Olá boa tarde, primeiro irei postar minhas classes.

import java.util.Calendar;

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

@Entity // para que o hibernate a torne persistivel
public class Produto {
	@Id // chave primaria
	@GeneratedValue // que esta chave seja populada no banco (sequence)

	private Long id;
    private String nome;
    private String descricao;
    private double preco;
    private Calendar dataInicioVenda;
    
	public void setId(Long id) {
		this.id = id;
	}
	public Long getId() {
		return id;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setPreco(double preco) {
		this.preco = preco;
	}
	public double getPreco() {
		return preco;
	}
	public void setDataInicioVenda(Calendar dataInicioVenda) {
		this.dataInicioVenda = dataInicioVenda;
	}
	public Calendar getDataInicioVenda() {
		return dataInicioVenda;
	}
}
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.classic.Session;


public class FuncoesHiber {
  
  private Session session;
  
  public FuncoesHiber(Session session) {
      this.session = session;
  }
  public void salva(Produto p) {
      this.session.save(p);
  }
  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);
  }
  public List<Produto> listaTudo() {
	    return this.session.createCriteria(Produto.class).list();
	}

}
import java.util.Scanner;

import org.hibernate.classic.Session;


public class DeletaProduto {
	public static void main(String[] args) {
		Session session = (Session) new HibernateUtil().getSession();
		FuncoesHiber funcoes = new FuncoesHiber(session);
		Produto p = new Produto();
		Scanner entrada = new Scanner (System.in);
		String nome="TESTE1";
		p.setNome(nome);
		
		funcoes.remove(p);

	}
}

O meu problema é na main galera, nao estou conseguindo pegar uma logica adequada para deletar meu registro se alguem conseguir me ajudar obg

4 Respostas

romarcio

O hibernate vai exluir o objeto pelo Id da tabela e não pelo nome nome.

Então vc teria que setar o ID: p.setId(5);
O
u então fazer uma busca pelo nome, e passar como parâmetro esse objeto com o resultado da busca.

doravan

romarcio:
O hibernate vai exluir o objeto pelo Id da tabela e não pelo nome nome.

Então vc teria que setar o ID: p.setId(5);
O
u então fazer uma busca pelo nome, e passar como parâmetro esse objeto com o resultado da busca.

Complementando, o ID irá identificar seu objeto na sessão, para apagar seu objeto, é necessário buscá-lo através do ID ou enviar o comando de remoção apontando o ID do objeto.

R
import java.util.Scanner;

import org.hibernate.classic.Session;


public class DeletaProduto {
	public static void main(String[] args) {
		Session session = (Session) new HibernateUtil().getSession();
		Produto p = new Produto();
		Scanner entrada = new Scanner (System.in);
        p.setId(1);//deletando pelo ID
        session.beginTransaction();
        session.delete(p);
        session.getTransaction().commit();
        session.close();

	}
}

Obrigado isso, funcionou, so que agora estou querendo fazer o "delete" do registro por qualquer um dos campos que o usuario digitar, é possivel ? pensei em usar criteria

romarcio

Sim é possível desde que vc passe o ID também. Faça uma consulta usando criteria que retorne o objeto desejado e então execute o comando delete.

public static void main(String[] args) {  
        Session session = (Session) new HibernateUtil().getSession();  
        Produto p = new Produto();  
        Scanner entrada = new Scanner (System.in);  
        //p.setId(1);//deletando pelo ID
        String descricao = "Sabão em pó";  
        p = session.createCriteria(Produto.class).add(Restrictions.eq("descicao",descricao)).uniqueResult();
        session.beginTransaction(); 
        session.delete(p);  
        session.getTransaction().commit();  
        session.close();  
  
    }
Criado 28 de dezembro de 2010
Ultima resposta 28 de dez. de 2010
Respostas 4
Participantes 3