Objeto sempre com descrição NULL

14 respostas
R

Bom, estou depurando um código em java (no eclipse) e quando eu instancio o classe Teller e passo o mouse em cima do objeto teller, ele aparece como NULL, veja:

Teller teller = new Teller();
    teller.setSincronizado(false);
    teller.setData(Helper.getInstance().getDataAtual());

Então o objeto “teller” aparece assim:

br.com.sysvar.bean.Teller#null

o que pode ser ?

14 Respostas

igor_ks

Se o breakpoint estiver na linha 01 (do seu codigo postado no forum), ele ficará nulo mesmo,
agora se tiver na linha 02, ai realmente tem algo estranhamente errado

R

Então tem algo errado pois esta na linha 02.

R

Creio que por causa deste problema é que estou recebendo o erro abaixo do HIBERNATE.

DEBUG 09/07/2013 13:26:51 [br.com.dao.HibernateDAO:76] - Bean object inserted into the data store: br.com.bean.Teller#null
ERROR 09/07/2013 13:26:51 [org.hibernate.AssertionFailure:22] - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null identifier
drsmachado

Tente dar um clean no projeto (project > clean) e certifique-se que o build está em automático.
O eclipse, por vezes, se perde quanto à atualizações de código e isso pode ocasionar teu problema.
Outra opção é, caso a classe Teller tenha sido escrita por ti, debugue o método construtor (se está usando o default, crie um sem argumentos).

R

Bom, dei um clean no projeto e testei e não funcionou. Então criei um construtor explicitamente sem argumentos e o debuguei, mas também da o mesmo problema.

drsmachado

Tem algo muito errado aí.

R

Possivelmente !

R

Assim, só pra deixar claro: O objeto é criado com todos seus atributos normalmente, a única questão é saber se é normal no DEBUG aparecer essa linha: br.com.sysvar.bean.Teller#null .

Pois lembro-me de uma vez ter depurado um objeto e ter algo tipo:
br.com.sysvar.bean.MeuObjeto#1234342

Ou seja, tinha um ID (número) logo após o hashtag e não um NULL.

drsmachado

Não é normal, definitivamente.

R

Bom, se não é normal ter um NULL após o “#”, continuemos a luta para a solução. Conto com a ajuda de vocês.

drsmachado

Agora que eu me liguei, pode ser que o valor null esteja sendo atribuído pura e simplesmente por ser um objeto de um Integer ou Long que ainda não foi valorado.
Como assim?
Imagine que você tem o método toString sobrescrito para este objeto (ou para seu ancestral mais próximo) e que neste método o retorno seja algo como

public String toString(){
    return id + "";
}

Se id é um tipo Long ou Integer (ou Short) e não tem valor associado a ele, ele é nulo.

R

Estranho, porque fiz um teste aqui da seguinte forma: Essa Classe que ta dando #null estende de uma outra, então tirei o extends dela e debuguei denovo objeto, e pra minha surpresa olha o que ela retornou:

br.com.bean.Teller@abefcf6

saiu o NULL. O que pode ser isso ? Esta Classe tem seu próprio construtor (não herda da classe pai).

drsmachado

Significa que o que eu suspeitava está certo.
O toString da superclasse é quem está devolvendo o que você via no debug.
Quando você não tem um toString, o default informa algo como o que você acabou de ver, com o nome completo da classe @ algum número.

R

Entendi, mas porque do erro no hibernate falando : null identifier ?

Criado 9 de julho de 2013
Ultima resposta 9 de jul. de 2013
Respostas 14
Participantes 3