Correspondente é HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Mas em HQL é melhor recuperar o objeto inteiro para que possamos usar as outras propriedades também
from ADVRoheader header
inner join
header.advmagencymaster master
HQL não depende do banco de dados subjacente. Será o mesmo para todos os bancos de dados (Oracle, MySQL, SQL server etc). Apenas precisamos alterar a conexão do banco de dados no arquivo de configuração principal.
Suas classes de modelo ficarão assim
class ADVMAgencyMaster{
private String mamaid;
private String mamaname; //getters and setters
}
class ADVRoheader{
private String trohiono;
private ADVMAgencyMaster advmagencymaster; // Reference to the ADVMAgencyMaster
//getters and setters}
Você já definiu uma relação muitos para um em xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Portanto, ao carregar o objeto ADVRoheader, a hibernação também carregará a referência do objeto interno "advmagencymaster".
para isso você precisa especificar lazy="false" em vez de fetch="select".
lazy="true" - carregamento lento carregará apenas o objeto pai
lazy-"false" - o carregamento antecipado carregará o objeto filho (interno) também com o objeto pai.
adicione ambos os arquivos hbm.xml ao arquivo de configuração principal (hibernate.cfg.xml) da seguinte forma
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
pouco antes da tag de fechamento da fábrica de sessão aqui, o mapeamento está acontecendo com o banco de dados.
Normalmente, para elementos geradores, precisamos usar o tipo integer e fazer a alteração no banco de dados também.
Filtragem extra, podemos adicionar a cláusula 'where' após a consulta principal. Aqui apenas a condição de junção é necessária e já é tratada pelo hibernate.