Classe está como detached e não consigo excluir pelo Hibernate

4 respostas
M

Bom dia pessoal, estou desenvolvendo um aplicativo com MyFaces + Hibernate 3.1.3 e quando estou tentando excluir um registro que está ativo em minha sessão estou recebendo a seguinte mensagem:

the detached instance passed to delete() had a null identifier

Verifiquei na documentacao do Hibernate e detached é um dos tres estados que um objeto pode estar e simplemeste resolveria utilizar um Lock, SaveOrUpdate… mas não está funcionando, reparei q se antes de eu Deletar der um session.persist(objeto) consigo excluir… mas acho q isso nao é o mais correto…

Obrigado

4 Respostas

A

É porque você está tentando deletar um objeto que não foi persistido ainda. O erro é justamente este, the detached instance passed to delete() had a null identifier , quer dizer que ele está sem id. Tente setar um id que ja éxiste no banco nele e chame o metodo, provavelmente vai deletar.

Alberto

M

Ola na verdade ele está persistido e possui ID, eu estou fazendo o seguinte no meu DataTable:

public String selecionado () {
		String retorno = Constants.OUTCOME_SUCCESS;
		try {
			conta = (Conta) listaContas.getRowData();
			retorno = Constants.OUTCOME_SUCCESS;
		} catch (Exception e) {
			System.out.println(e.getMessage());
			retorno = Constants.OUTCOME_ERROR;
		}
		return retorno;
	}

e mando para a pagina do formulário onde o usuário possui o botão de Excluir:

public String excluirConta() {
		Session session = HibernateUtility.getSession();
		String retorno = Constants.OUTCOME_SUCCESS;
		try {			
			session.delete(conta);
			retorno = Constants.OUTCOME_SUCCESS;
		} catch (HibernateException e) {
			retorno = Constants.OUTCOME_ERROR;
			System.out.println(e.getMessage());
		}
		return retorno;
	}

dai acontece o erro! será q pode ser outra coisa ?

T

Deves tá tentando exluir um objeto que nem chegou a ser persistido.

M

Então esse registro q tento excluir ja está persistido sim, eu na verdade faço o seguinte caminho em minha aplicação:

Pagina de Pesquisa > Seleciono o registro > Exibo o registro em um formulario > Pressiono o botão Excluir > Ocorre o erro

Um detalhe q esta me deixando meio confuso é q se antes de realizar o session.delete(obj) faço um session.persist(obj) ele persiste um novo objeto no banco e exclui o antigo…

Criado 9 de dezembro de 2006
Ultima resposta 9 de dez. de 2006
Respostas 4
Participantes 3