[Resolvido] Duvida com consulta no Hibernate

Eu tenho uma classe Cliente assim

[code]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
}[/code]

<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

[code]public class Cidade {

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

//o resto
}[/code]

<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?

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;  
      
   
   }  
//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();

}

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.

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.

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.

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