Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

JOINs com condição na consulta HQL?


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.