SQLQuery com hibernate não deleta o registro

5 respostas
Romildo_Paiter

E ai Galera tudo bem..

Estou usando Hibernate, estou fazendo uns teste com os seguintes código, que esta dando um resultado estranho.

Esse primeiro foi um código que peguei com um amigo, mas não consegui colocar para rodar. não entendi sobre esse VO. Qual seria o comportamento desse objeto.

public void excluir(VO vo) {
		Session sessao = HibernateUtil.getSession();
		sessao.beginTransaction();
		sessao.delete(vo);
		sessao.getTransaction().commit();
	}
Esse segundo, vamos dizer que funciona, não da erro e no final ele pede para apresentar um quantas linhas foram alteradas. Legal até ai. Ele mostra que uma linha foi alterada. Mas quando vou olhar no DB, o registro que pedi para deletar não foi deletado. Continua lá no mesmo lugar.
public void delete(int id )
	{
		Session sessao =  HibernateUtil.getSession();
		String sql = "delete from produto where id = :id";
		Query query = sessao.createSQLQuery(sql);
		query.setInteger("id", id);
		int rowCount = query.executeUpdate();
		System.out.println("Rows affected: " + rowCount);	
	}
@Entity
public class Produto {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private long id;
	@Column
	private String codigo;
	@Column
	private String descricao;
	@Column
	private String valor;
	
	public Produto(){
	}

	public Produto(String codigo, String descricao, String valor){
		this.codigo = codigo;
		this.descricao = descricao;
		this.valor = valor;
	}
      
        // get`s e set`s

Alguém pode me ajudar como resolver esse carinha e se tem alguma outra maneira de fazer.
Obrigado pessoal.

5 Respostas

R

Aí vão alguns palpites… acho que você precisa armazenar a transação para poder fazer o commit:

public void excluir(VO vo) {  
  Session sessao = HibernateUtil.getSession();  
  Transaction tran = sessao.beginTransaction();  
  sessao.delete(vo);  
  tran.commit();  
}

O “VO” muito provavelmente é um acrônimo para “Value Object”. Quanto ao SQLQuery que não funciona, creio que isso pode ser corrigido se você executar o SQLQuery dentro do contexto de uma transação, como no trecho acima.

rogelgarcia

Tenta dar um flush na sessão…

session.flush() se não me engano

higornucci

O que esse ‘flush’ faz?

rogelgarcia

Tinha um outro cara com o mesmo problema seu… ele disse que deu certo…

O flush… pega os comandos que tem que ser executados no banco e executa…

Quando vc dá um comando no hibernate ele nao executa na hora… dando um flush… vc força a execução

rogelgarcia
public void excluir(VO vo) {    
  Session sessao = HibernateUtil.getSession();    
  Transaction tran = sessao.beginTransaction();    
  sessao.delete(vo);    
  sessao.flush();
  tran.commit();    
}
Criado 3 de março de 2010
Ultima resposta 5 de mar. de 2010
Respostas 5
Participantes 4