Método delete não funciona e não da erro(Hibernate)

3 respostas
leonardowolter

Olá, GUJ!
Eu sou novato em java e estou tendo um problema com o hibernate.

(OBS: Estou usando o VRaptor, caso isso seja relevante à situação)

O problema é o seguinte: o metodo delete simplesmente não deleta do BD. Ele apenas roda, sem dar erro nem exception(porém nem executar a query ele executa)

Aqui estão minhas classes:

Modelo:

package br.com.druckduck.models;


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

@Entity
@Table(name="pag")
public class Pagina {
	
	//Atributos - Campos
	@Id
	@GeneratedValue
	@Column(name="id_pag", length=4, nullable=false, unique=true)
	private Long id;
	@Column(name="name_pag", length=45, nullable=false)
	private String namePagina;
	
	
	//Metodos
	public String getNamePagina() {
		return namePagina;
	}
	public void setNamePagina(String namePagina) {
		this.namePagina = namePagina;
	}
	public Long getId() {
		return id;
	}


}

DAO:

package br.com.druckduck.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.druckduck.hibernate.HibernateUtil;
import br.com.druckduck.models.Pagina;

public class PaginaDAO {
	private final Session session;

	public PaginaDAO() {
		this.session = (Session) new HibernateUtil().getSession();
	}

       //esse adiciona está funcionando
	public void adiciona(Pagina pagina) {
		Transaction tx = session.beginTransaction();
		session.save(pagina);
		tx.commit();
		session.close();
	}

        //este é o método que não funciona
	public void remove(Pagina pagina) {
		Transaction tx = session.beginTransaction(); 
		session.delete(pagina);
		tx.commit();  
		session.close();
	}

	
}

Ja tentei dar flush e nem assim funcionou =/

Obrigado desde ja galera!

EDIT:
Ja resolvi, galera.
O problema era que, por algum motivo, o tipo do id do modelo não podia ser Long(não sei porque, se alguem puder esclarecer isso eu agradeço). Quando mudei para int foi =]

3 Respostas

jaboot

Talvez ele devia ler esse Long, dava um cast pra int, e com isso muda o valor.

Tipo, se você fizer um delete … where codigo = (um código que não existe), não vai dar pau, mas também não vai deletar!

Vini_Fernandes

Primeiro, verifique qual eh o ID do seu bean e depois veja se existe algum registro com esse valor na chave primaria. Desconfio que voce esta tentando remover algo que nao existe no banco de dados.

abrs

leonardowolter

jaboot:
Talvez ele devia ler esse Long, dava um cast pra int, e com isso muda o valor.

Tipo, se você fizer um delete … where codigo = (um código que não existe), não vai dar pau, mas também não vai deletar!

Sim, eu tbm achei que devia dar o cast(quando eu fiz o exercicio antes tinha funcionado sem problema)

Vini Fernandes:
Primeiro, verifique qual eh o ID do seu bean e depois veja se existe algum registro com esse valor na chave primaria. Desconfio que voce esta tentando remover algo que nao existe no banco de dados.

abrs

Quanto ao id, é o mesmo da chave primaria sim, eu ja havia conferido. E eu não alterei o valor de nenhum atributo, só mudei o tipo pra int

Criado 15 de fevereiro de 2012
Ultima resposta 16 de fev. de 2012
Respostas 3
Participantes 3