Motsvarande är HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Men i HQL är det bättre att hämta hela objektet så att vi kan använda de andra egenskaperna också
from ADVRoheader header
inner join
header.advmagencymaster master
HQL är inte beroende av den underliggande databasen. Det kommer att vara samma för alla databaser (Oracle, Mysql, SQL-server etc). Endast Vi behöver ändra databasanslutningen i huvudkonfigurationsfilen.
Dina modellklasser kommer att se ut så här
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}
Du har redan definierat en många till en relation i xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Så medan laddning av ADVRoheader-objekt kommer hibernate att ladda den inre objektreferensen "advmagencymaster" också.
för detta måste du ange lazy="false" istället för fetch="select".
lazy="true" - lat laddning det kommer att ladda endast överordnat objekt
lazy-"false" - ivrigt att ladda det kommer att ladda barn(inre) objekt även med överordnat objekt.
lägg till båda hbm.xml-filerna i huvudkonfigurationsfilen (hibernate.cfg.xml) enligt följande
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
precis innan sessionsfabrikens stängningstagg här sker mappningen med Database.
Vanligtvis för generatorelement måste vi använda typen heltal och göra ändringen i databasen också.
Extra filtrering kan vi lägga till "where"-klausul efter huvudfrågan. Här krävs endast anslutningsvillkor och det hanteras redan av viloläge.