Odpovídající je HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Ale v HQL je lepší načíst celý objekt, abychom mohli použít i ostatní vlastnosti
from ADVRoheader header
inner join
header.advmagencymaster master
HQL nezávisí na podkladové databázi. Bude stejná pro všechny databáze (Oracle, Mysql, SQL server atd.). Potřebujeme pouze změnit připojení k databázi v hlavním konfiguračním souboru.
Vaše modelové třídy budou vypadat takto
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}
Již jste definovali relaci mnoho ku jedné v xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Takže při načítání objektu ADVRoheader hibernace se načte také odkaz na vnitřní objekt "advmagencymaster".
k tomu musíte zadat lazy="false" místo fetch="select".
lazy="true" - líné načítání načte pouze nadřazený objekt
lazy-"false" - dychtivé načtení načte podřízený (vnitřní) objekt také s rodičovským objektem.
přidejte oba soubory hbm.xml do hlavního konfiguračního souboru (hibernate.cfg.xml) následovně
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
těsně před značkou uzavření továrny relace zde probíhá mapování pomocí databáze.
Obvykle pro prvky generátoru potřebujeme použít typ integer a provést změnu také v databázi.
Extra filtrování můžeme přidat klauzuli 'kde' za hlavní dotaz. Zde je vyžadována pouze podmínka připojení a je již zpracována hibernací.