Oracle
 sql >> Database >  >> RDS >> Oracle

JOINs con condizione nella query HQL?

Il corrispondente è HQL

  select header.advmagencymaster.mamaid,
         header.advmagencymaster.mamaname,header.trohiono 
         from ADVRoheader header 

Ma in HQL è meglio recuperare l'intero oggetto in modo da poter utilizzare anche le altre proprietà

   from ADVRoheader header 
   inner join 
   header.advmagencymaster master

HQL non dipende dal database sottostante. Sarà lo stesso per tutti i database (Oracle, Mysql, server SQL, ecc.). Solo è necessario modificare la connessione al database nel file di configurazione principale.

Le tue classi modello avranno questo aspetto

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}

Hai già definito una relazione molti a uno in xml

 <many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>

Quindi, durante il caricamento dell'oggetto ADVRoheader, l'ibernazione caricherà anche il riferimento all'oggetto interno "advmagencymaster".

per questo è necessario specificare lazy="false" invece di fetch="select".

lazy="true" - il caricamento lento caricherà solo l'oggetto genitore

lazy-"false" - il caricamento ansioso caricherà l'oggetto figlio (interno) anche con l'oggetto genitore.

aggiungi entrambi i file hbm.xml nel file di configurazione principale (hibernate.cfg.xml) come segue

 <mapping resource="com/ADVRoheader.hbm.xml"></mapping>
 <mapping resource="com/ADVRomaster.hbm.xml"></mapping> 

appena prima del tag di chiusura della fabbrica della sessione, qui sta avvenendo la mappatura con il database.

Di solito per gli elementi del generatore dobbiamo usare il tipo intero e apportare anche le modifiche al database.

Filtraggio aggiuntivo possiamo aggiungere la clausola "where" dopo la query principale. Qui è richiesta solo la condizione di unione ed è già gestita da ibernazione.