Inner join e hibernate

2 respostas
F

Pessoal,

Tenho a classe Cliente com o atributo

private Endereco endereco.

O mapeamento da classe Cliente é

<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping package=“entidade”>

<class name=“Cliente” table=“CLIENTE”>

<id name=“lngCodigo”>

<generator class=“increment”></generator>

</id>

<!-- Propriedades e campos -->
<property name=“strNome”></property>
<property name=“strTelefone”></property>
<property name=“strDocumento”></property>

<many-to-one name=“endereco” class=“entidade.Endereco” column=“lngEndereco” cascade=“none”>
</many-to-one>

</class>
</hibernate-mapping>

A minha dúvida é como eu faço no Hibernate uma consulta para retornar o cliente e seu endereço? Isto é, retornar todos os meus cliente e seu endereço e também retornar um cliente específico e seu endereço.

Tentei fazer assim

String strConsulta = "from Cliente, Endereco " +
"where Cliente.LngEndereco = Endereco.LngCodigo " +
“and Cliente.LngCodigo = :lngCodigo”;

Query qry = session.createQuery(strConsulta);
qry.setInteger(“lngCodigo”, lngCliente);

E assim

String strConsulta = "from Cliente inner join Endereco " +
"on Cliente.LngEndereco = Endereco.LngCodigo " +
“where Cliente.LngCodigo = :lngCodigo”;

Query qry = session.createQuery(strConsulta);
qry.setInteger(“lngCodigo”, lngCliente);

Mais não deu certo. Dá a mensagem
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” org.hibernate.HibernateException: Invalid path: ‘null.LngEndereco’ [from entidade.Cliente, entidade.Endereco where Cliente.LngEndereco = Endereco.LngCodigo and Cliente.LngCodigo = :lngCodigo]
at entidadeDAO.ClienteDAO.selecionar(ClienteDAO.java:92)
at principal.Principal.main(Principal.java:63)ou

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main org.hibernate.HibernateException: unexpected token: on near line 1, column 43 [from entidade.Cliente inner join Endereco on Cliente.LngEndereco = Endereco.LngCodigo where Cliente.LngCodigo = :lngCodigo]

at entidadeDAO.ClienteDAO.selecionar(ClienteDAO.java:92)

at principal.Principal.main(Principal.java:63)

2 Respostas

aguiaMen

foi
Viu vc está usando hibernate, e no caso já possui a(s) chaves de cliente (LngCodigo) então é só da um load que vc vai ter o nome do cliente.
Assim restou vc pesquisar o endereço. Que dai fica uma pesguisa simples.
[]´s

F

aguiaMen:
foi
Viu vc está usando hibernate, e no caso já possui a(s) chaves de cliente (LngCodigo) então é só da um load que vc vai ter o nome do cliente.
Assim restou vc pesquisar o endereço. Que dai fica uma pesguisa simples.
[]´s

aguiaMen,

Valeu deu certo desta forma. Também dei uma lida sobre a propriedade lazy. Isso também ajudou na solução do problema.

Obrigado pela ajuda.

Criado 5 de agosto de 2009
Ultima resposta 6 de ago. de 2009
Respostas 2
Participantes 2