Bom noite!
Tenho uma aplicação que cadastra o cliente, o seu veiculo, e o orcamento que este cliente vai realizar em seu veiculo.
Minha tabela cliente tem um relacionamento de 1:n com a tabela veiculo e orcamento.
Mas quando realizo uma consulta na tabela cliente ustilizando “JPA”, a consulta me retorna os dados, porem o “idorcamento” e o “idveiculo” são apresentados de forma errada.
Exemplo:
A classe Cliente:
package Oficina;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name=“cliente”)
@NamedQueries({@NamedQuery(name = “Cliente.findByIdcliente”,
query = “SELECT c FROM Cliente c WHERE c.idcliente = :idcliente”),
@NamedQuery(name = “Cliente.findByTipoDocumento”,
query = “SELECT c FROM Cliente c WHERE c.tipoDocumento = :tipoDocumento”),
@NamedQuery(name = “Cliente.findByCidade”,
query = “SELECT c FROM Cliente c WHERE c.cidade = :cidade”),
@NamedQuery(name = “Cliente.findByBairro”,
query = “SELECT c FROM Cliente c WHERE c.bairro = :bairro”),
@NamedQuery(name = “Cliente.findByEndereco”,
query = “SELECT c FROM Cliente c WHERE c.endereco = :endereco”),
@NamedQuery(name = “Cliente.findByTelefone”,
query = “SELECT c FROM Cliente c WHERE c.telefone = :telefone”),
@NamedQuery(name = “Cliente.findByNome”,
query = “SELECT c FROM Cliente c WHERE c.nome = :nome”)
})
@SequenceGenerator(name = “seq_cliente”, sequenceName=“cliente_idcliente_seq”,
initialValue = 1, allocationSize = 1)
public class Cliente implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_cliente")
private int idcliente;
private String nome;
private int tipoDocumento;
private int telefone;
private String endereco;
private String bairro;
private String cidade;
@OneToMany(mappedBy = "cliente")
private Collection<Orcamento> orcamentos;
@OneToMany(mappedBy = "cliente")
private Collection<Veiculo> veiculos;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getTipoDocumento() {
return tipoDocumento;
}
public void setTipoDocumento(int tipoDocumento) {
this.tipoDocumento = tipoDocumento;
}
public int getTelefone() {
return telefone;
}
public void setTelefone(int telefone) {
this.telefone = telefone;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public int getIdcliente() {
return idcliente;
}
public void setIdcliente(int idcliente) {
this.idcliente = idcliente;
}
public Collection<Orcamento> getOrcamentos() {
return orcamentos;
}
public void setOrcamentos(Collection<Orcamento> orcamentos) {
this.orcamentos = orcamentos;
}
public Collection<Veiculo> getVeiculos() {
return veiculos;
}
public void setVeiculos(Collection<Veiculo> veiculos) {
this.veiculos = veiculos;
}
}
A classe responsavel pela consulta na tabela cliente:
public static void consultaCliente(){
em.getTransaction().begin();
Query q = em.createQuery("select c from Cliente c where c.id = 2");
List<Cliente> clientes = q.getResultList();
for (Cliente cliente : clientes) {
System.out.println(cliente.getIdcliente());
System.out.println(cliente.getNome());
System.out.println(cliente.getTelefone());
System.out.println(cliente.getCidade());
[b] System.out.println(cliente.getOrcamentos());
System.out.print(cliente.getVeiculos());[/b]
}
em.getTransaction().commit();
}
O retorno da consulta e apresentado assim:
idcliente
2
nome
Daniela
telefone
2222-2222
cidade
goiania
idorcamento
[Oficina.Orcamento@1551b0]
idveiculo
[Oficina.Veiculo@6ed322]
Ja o retorno da consulta feita em SQL me retorna todos os dados corretos:
idcliente
2
telefone
2222-2222
cidade
Goiania
idorcamento
2
idveiculo
2
Minha duvida e como deve proceder quanto a consulta em JPA para que na tabela cliente o retorno dos dados seja de forma correta com é em SQL. No idorcamento e no idveiculo, utilizando JPA deveria apresentar o numeros de forma correta e nao da forma que estao sendo apresentados.
O que devo fazer?
Obrigado pela atenção…