Hibernate retornando objeto de relacionamento NULL

4 respostas
W

Opa, pessoal

Bom o negócio é o seguinte tenho uma classe X que possui um relacionamento com a classe Y exemplo:

public class X implements Serializable {
...   

    @OneToOne
    @JoinColumn(name = "codigoy")
    private Y cy;

....
}

Quando o campo codigoy no banco esta populado ele retorna normal o objeto cy,
daí que vem o problema quando não está populado ele retorna o objeto cy vazio = null,

Então minha duvida é tem como fazer o hibernate retornar uma nova instancia do objeto cy ao inves de null?
Alguma anotação ou algo que de para tratar antes de chegar no controle?

4 Respostas

T

só pra eu entender…

Você tem a tabela X que dentro dela tem um campo codigy que é da tabela Y, certo?

Quando lá está populado, tranquilo né?

Quando este código da tabela Y está null, e você tenta acessa-lo da tabela X, dá NullPointer, correto?

Faz assim…

@OneToOne  
@JoinColumn(name = "codigoy", nullable = false)
private Y cy;

Não sei se este é realmente seu problema, se for isso mesmo que eu entendi, talvez isso possa resolver o seu problema.

W

Você tem a tabela X que dentro dela tem um campo codigy que é da tabela Y, certo?
Sim a tabela X tem um campo codigoy.

Quando lá está populado, tranquilo né?
Sim, quando esse campo tem valor sem problemas.

Quando este código da tabela Y está null, e você tenta acessa-lo da tabela X, dá NullPointer, correto?
Então, não chega a lançar uma excessão no momento da consulta, o meu problema é que estou utilizando jsf e o campo q recebe esse valor vai está com o objeto null e depois isso sim gerará um erro.

O erro acontece pq o obejto X.Y está null,
tem como eu tratá-lo no controle depois de realizada a consulta por exemplo:

//consulta no hibernate para me retornar x
   x = ConsultaDAO.getX();
//dai posso verificar aqui e y esta null e instancia-lo novamente
 if(x.y == null){
   x.y = new Y();
}

Então gostaria de saber se tem como fazer isso ou no mapeamento ou no modelo para que não precise tratar todas as classes no controle.

aeciovc

mas… o normal é que ele fica null mesmo não??

se não existe Y para aquele X? ele deveria estar instanciado??

pq daria problemas depois?

W

mas… o normal é que ele fica null mesmo não??
sim, está correto esta afirmação, mas achei q poderia arrumar um jeito de contornar isso.

se não existe Y para aquele X? ele deveria estar instanciado??
pq daria problemas depois?
entao o problema ocorre pq trago um campo do elemento Y para um input no meu JSF,
e como ele está null ocorre este erro.

Mas pendei q poderia arrumar isso direto no hibernate, mas não deve ter jeito mesmo ne?

Criado 10 de junho de 2010
Ultima resposta 10 de jun. de 2010
Respostas 4
Participantes 3