Odpowiada to HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Ale w HQL lepiej jest pobrać cały obiekt, abyśmy mogli również użyć innych właściwości
from ADVRoheader header
inner join
header.advmagencymaster master
HQL nie zależy od bazowej bazy danych. Będzie taki sam dla wszystkich baz danych (Oracle, Mysql, serwer SQL itp.). Tylko musimy zmienić połączenie z bazą danych w głównym pliku konfiguracyjnym.
Twoje klasy modeli będą wyglądać tak
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}
Zdefiniowałeś już relację wiele do jednego w xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Tak więc podczas ładowania obiektu ADVRoheader hibernacja załaduje również wewnętrzne odniesienie do obiektu „advmagencymaster”.
w tym celu musisz podać lazy="false" zamiast fetch="select".
lazy="true" - leniwe ładowanie załaduje tylko obiekt nadrzędny
lazy-"false" - chętne ładowanie spowoduje załadowanie obiektu potomnego (wewnętrznego) również z obiektem nadrzędnym.
dodaj oba pliki hbm.xml do głównego pliku konfiguracyjnego (hibernate.cfg.xml) w następujący sposób
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
Tuż przed tagiem zamykającym fabrykę sesji, tutaj mapowanie odbywa się z bazą danych.
Zwykle dla elementów generatora musimy użyć typu integer i dokonać zmiany również w bazie danych.
Dodatkowe filtrowanie możemy dodać klauzulę 'where' po głównym zapytaniu.Tutaj wymagany jest tylko warunek dołączenia i jest już obsługiwany przez hibernację.