Consulta JPA

1 resposta
robson_oliveira

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…

1 Resposta

jcmird

Para faciliar posta a classes que vc está utilizando para o mapeamento com o banco…
assim o pessoal pode te ajudar…

abs

Criado 13 de maio de 2009
Ultima resposta 13 de mai. de 2009
Respostas 1
Participantes 2