inner join e hibernate  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
foi
HelloWorld

Membro desde: 18/05/2003 19:08:55
Mensagens: 11
Offline

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)
aguiaMen
Thread.start()
[Avatar]

Membro desde: 17/04/2008 07:52:42
Mensagens: 43
Offline

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
foi
HelloWorld

Membro desde: 18/05/2003 19:08:55
Mensagens: 11
Offline

aguiaMen wrote: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.
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team