Opa pessoal…
Sempre que eu realizei joins no hibernate, eram com relacionamentos que ja haviam sido mapeados pelo Hibernate Tools do eclipse, utilizando um HQL parecido com este:
select item.id.seqItemPacote, item.desItemPacote, item.valItemPacote, item.sigMoedaItemPacote, fornecedor.nomSintet from PacoteViagemItem item left join item.fornecedor fornecedor where item.id.codOrgao=:orgao and item.id.numPacote=:pacote order by item.id.seqItemPacote
Sendo que item.fornecedor é um relacionamento MANY-TO-ONE já mapeado…
Agora oq eu preciso fazer é o seguinte…
Eu possuo o seguinte mapeamento no hibernate.
<hibernate-mapping>
<class name="br.com.dsystems.ds001.models.Ds001Processo" table="ds001_processo" schema="public">
<composite-id name="id" class="br.com.dsystems.ds001.models.Ds001ProcessoId">
<key-property name="codOrgao" type="string">
<column name="cod_orgao" length="12" />
</key-property>
<key-property name="numAnoProces" type="java.lang.Short">
<column name="num_ano_proces" precision="4" scale="0" />
</key-property>
<key-property name="numProces" type="java.lang.Integer">
<column name="num_proces" precision="7" scale="0" />
</key-property>
</composite-id>
<property name="codClient" type="java.lang.Integer">
<column name="cod_client" precision="7" scale="0" not-null="true" />
</property>
<property name="sigPacote" type="string">
<column name="sig_pacote" length="10" />
</property>
<property name="desTituloPacote" type="string">
<column name="des_titulo_pacote" length="60" not-null="true" />
</property>
<property name="sigMoedaProces" type="string">
<column name="sig_moeda_proces" length="6" />
</property>
<property name="valPrecoPacote" type="big_decimal">
<column name="val_preco_pacote" precision="18" />
</property>
<property name="datHoraLimiteFecham" type="timestamp">
<column name="dat_hora_limite_fecham" length="8" />
</property>
<property name="numPacoteRefere" type="java.lang.Integer">
<column name="num_pacote_refere" precision="7" scale="0" />
</property>
<property name="datCadast" type="timestamp">
<column name="dat_cadast" length="8" not-null="true" />
</property>
<property name="codUsuariCadast" type="string">
<column name="cod_usuari_cadast" length="10" not-null="true" />
</property>
<set name="ds001ProcessoItems" inverse="true">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_proces" precision="4" scale="0" not-null="true" />
<column name="num_proces" precision="7" scale="0" not-null="true" />
</key>
<one-to-many class="br.com.dsystems.ds001.models.Ds001ProcessoItem" />
</set>
<set name="ds001ProcessoHistoricos" inverse="true">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_proces" precision="4" scale="0" not-null="true" />
<column name="num_proces" precision="7" scale="0" not-null="true" />
</key>
<one-to-many class="br.com.dsystems.ds001.models.Ds001ProcessoHistorico" />
</set>
<set name="ds001ProcessoTextos" inverse="true">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_proces" precision="4" scale="0" not-null="true" />
<column name="num_proces" precision="7" scale="0" not-null="true" />
</key>
<one-to-many class="br.com.dsystems.ds001.models.Ds001ProcessoTexto" />
</set>
<set name="ds001ProcessoPassageiros" inverse="true">
<key>
<column name="cod_orgao" length="12" not-null="true" />
<column name="num_ano_proces" precision="4" scale="0" not-null="true" />
<column name="num_proces" precision="7" scale="0" not-null="true" />
</key>
<one-to-many class="br.com.dsystems.ds001.models.Ds001ProcessoPassageiro" />
</set>
</class>
</hibernate-mapping>
A property codClient se refere ao código do cliente, em que os dados estão armazenados na tabela Cliente.
Eu gostaria de realizar este join sem ter que mapear um relacionamento no arquivo hbm.xml, realizando o mesmo diretamente no HQL utilizando a property codClient…
Como eu faço isso ?
Ou eu sou obrigado a fazer o mapeamento para poder realizar o join ?
Obrigado.
Rodrigo Kerkhoff