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.