[Resolvido] Duvida com consulta no Hibernate

6 respostas
F

Eu tenho uma classe Cliente assim

public class Cliente {

    private int codigo;
    private Date dataCadastro;
    private String nome;
    private char sexo;
    private Date dataNascimento;
    private String endereco;
    private String complemento;
    private String bairro;
    private String rg;
    private String cpf;
    private String telefone;
    private String celular;
    private Cidade cidade;

//o resto
}
<hibernate-mapping>
  <class name="Classes.Cliente" table="Clientes">
    <id column="cli_codigo" name="codigo">
      <generator class="native"/>
    </id>
    <property column="cli_datacadastro" name="dataCadastro" type="date"/>
    <property column="cli_nome" name="nome"/>
    <property column="cli_sexo" name="sexo"/>
    <property column="cli_datanascimento" name="dataNascimento" type="date"/>
    <property column="cli_endereco" name="endereco"/>
    <property column="cli_complemento" name="complemento"/>
    <property column="cli_bairro" name="bairro"/>
    <property column="cli_rg" name="rg"/>
    <property column="cli_cpf" name="cpf"/>
    <property column="cli_telefone" name="telefone"/>
    <property column="cli_celular" name="celular"/>
    <many-to-one class="Classes.Cidade" column="cid_codigo" name="cidade"></many-to-one>
  </class>
</hibernate-mapping>

e uma classe Cidade assim

public class Cidade {

    private int codigo;
    private String nome;
    private Estado estado;
    private Set cliente;

//o resto
}
<hibernate-mapping>
  <class name="Classes.Cidade" table="Cidades">
    <id column="cid_codigo" name="codigo">
      <generator class="native"/>
    </id>
    <property column="cid_nome" name="nome"/>
    <many-to-one class="Classes.Estado" column="est_codigo" name="estado"/>
    <set name="cliente" inverse="true" cascade="save-update">
        <key column="cid_codigo"></key>
        <one-to-many class="Classes.Cliente"></one-to-many>
    </set>
  </class>
</hibernate-mapping>

E o problema é o seguinte:
Quando eu vou inserir no banco, eu crio um objeto Cidade, e do cliente.setCidade(cidade) e no banco salva o cliente já com o codigo da cidade certa.
A duvida agora é na consulta, que eu estou fazendo assim.
"From Cliente cli
Where cli.codigo = " + codigo
e com isso o cliente.getCidade ta sempre null.
O que preciso mudar para que já me retorne o Cliente com o objeto cidade certo?

6 Respostas

Pedrosa

Tente:

cliente.cidade = :cidade

Pois dentro da sua classe cliente tem uma cidade, habilite o show_sql para ver a query gerada.

E aqui não seria?

public class Cidade {  
         ...
        private Cliente cliente;  
      
   
   }
E
//retorna uma lista de clientes de acordo com o id da cidade
Public List<Cliente> buscarClientePorIdCidade(Integer idCidade){
 Query q = session.createQuery("SELECT c FROM Cliente c  WHERE c.cidade.idCidade = ? ");

 q.setInteger(0, idCidade);

 return q.list();

}
F

O problema não é fazer a consulta usando cidade.codigo = cliente.cidade.codigo. O problema está em, na consulta, retonar tambem a cidade.
Quando eu faço as consultas, o campo cidade vem sempre nulo.

E

Então sua dúvida nao corresponde ao titulo do seu tópico “Duvida com consulta no Hibernate”.
Cara depura o seu código e vejo o pq entao do seu parametro estah vindo nulo.

F

O problema é na consulta sim, mas não se resolveu com cidade.codigo = cliente.cidade.codigo.
Com isso, a consulta retorna todos os campos, menos o campo Cidade.

F

Já consegui. O problema tava no mapeamento. Usei lazy = “false” e funcionaou.
Valeu.

Criado 9 de março de 2009
Ultima resposta 10 de mar. de 2009
Respostas 6
Participantes 3