Saudacoes, é o seguinte estou aprendendo como usar o hibernate e seus relacionamentos, entao criei algumas classe simples para testes, sao elas:
Classe Pessoa
Classe Celular
Sendo que
Pessoa <–OneToOne–> Celular
Segue as classes
Pessoa
@Entity
public class Pessoa_1_1_Bi implements Serializable {
private static final long serialVersionUID = -923780075447341496L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nome;
@OneToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name="id_celular")
private Celular_1_1_Bi celular;
public Pessoa_1_1_Bi() {
}
public Pessoa_1_1_Bi(String nome, Celular_1_1_Bi celular) {
this.setNome(nome);
this.setCelular(celular);
}
// Get e Set
}
Celular
@Entity
public class Celular_1_1_Bi implements Serializable {
private static final long serialVersionUID = -5598157210546580533L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private int number;
@OneToOne(mappedBy="celular", fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private Pessoa_1_1_Bi pessoa = new Pessoa_1_1_Bi();
public Celular_1_1_Bi() {
}
public Celular_1_1_Bi(int numero) {
this.number = numero;
}
// Get e Set
}
Criada as tabelas pelo Hibernate carro as tabelas com alguns dados
Popula tabelas
Pessoa_1_1_Bi p;
Celular_1_1_Bi c;
c = new Celular_1_1_Bi(11111111);
p = new Pessoa_1_1_Bi("Pessoa 1", c);
em.merge(p);
c = new Celular_1_1_Bi(22222222);
p = new Pessoa_1_1_Bi("Pessoa 2", c);
em.persist(p);
c = new Celular_1_1_Bi();
p = new Pessoa_1_1_Bi("Pessoa 3", c);
em.persist(p);
p = new Pessoa_1_1_Bi("Pessoa 4", null);
em.persist(p);
Ate aqui sem erros
O problema esta na hora que eu tento carregar as instancias com o resultado vindo do banco, segue o codigo.
public static void selectCelular_1_n_Bi(){
em.getTransaction().begin();
Query q = em.createQuery("select q from " + Celular_1_1_Bi.class.getName() + " q ");
List<Celular_1_1_Bi> l = (List<Celular_1_1_Bi>) q.getResultList();
for (Celular_1_1_Bi p : l) {
System.out.printf("\n");
System.out.printf("Id_Pessoa: " + p.getPessoa().getId() + "\n");
System.out.printf("Nome: " + p.getPessoa().getNome() + "\n");
System.out.printf("Celular: " + p.getNumber() + "\n");
System.out.printf("--------------------\n");
}
}
O erro acontece quando tento imprimir a linha com o Id e nome da pessoa
Neste momento ele me fala que a Pessoa esta null, ou seja ele nao carregou a classe pessoa, so que como podem ver, a definicao das classe esta Bidirecional, uma classe deveria enchergar a outra, ou nao??
Esta é minha duvida, se eu chamar pelo classe Celular (por ser bidirecional) a classe pessoa deveria ser encontrada?? Se sim o que esta faltando??
Obrigado