Съответстващото е HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Но в HQL е по-добре да извлечем целия обект, за да можем да използваме и другите свойства
from ADVRoheader header
inner join
header.advmagencymaster master
HQL не зависи от основната база данни. Той ще бъде еднакъв за всички бази данни (Oracle, Mysql, SQL сървър и т.н.). Трябва само да променим връзката с базата данни в основния конфигурационен файл.
Вашите моделни класове ще изглеждат така
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}
Вече сте дефинирали релация много към едно в xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Така че докато се зарежда обект ADVRoheader, режимът на хибернация ще зареди и препратката към вътрешния обект "advmagencymaster".
за това трябва да посочите lazy="false" вместо fetch="select".
lazy="true" - отложеното зареждане ще зареди само родителски обект
lazy-"false" - нетърпеливото му зареждане ще зареди дъщерен (вътрешен) обект също с родителски обект.
добавете и двата файла hbm.xml към основния конфигурационен файл (hibernate.cfg.xml), както следва
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
точно преди фабричния затварящ етикет на сесията тук съпоставянето се извършва с база данни.
Обикновено за генераторни елементи трябва да използваме тип integer и да направим промяната и в базата данни.
Допълнително филтриране можем да добавим клауза 'where' след основната заявка. Тук се изисква само условие за присъединяване и то вече се обработва от хибернация.