Entsprechend ist HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Aber in HQL ist es besser, das gesamte Objekt abzurufen, damit wir auch die anderen Eigenschaften verwenden können
from ADVRoheader header
inner join
header.advmagencymaster master
HQL ist nicht von der zugrunde liegenden Datenbank abhängig. Es ist für alle Datenbanken gleich (Oracle, Mysql, SQL Server usw.). Nur müssen wir die Datenbankverbindung in der Hauptkonfigurationsdatei ändern.
Ihre Modellklassen werden so aussehen
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}
Sie haben bereits eine Viele-zu-Eins-Beziehung in XML definiert
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Beim Laden des ADVRoheader-Objekts lädt Hibernate also auch die innere Objektreferenz "advmagencymaster".
dafür müssen Sie lazy="false" anstelle von fetch="select".
angebenlazy="true" - Lazy Loading lädt nur das übergeordnete Objekt
lazy-"false" - eifriges Laden wird das untergeordnete (innere) Objekt auch mit dem übergeordneten Objekt laden.
fügen Sie beide hbm.xml-Dateien wie folgt zur Hauptkonfigurationsdatei (hibernate.cfg.xml) hinzu
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
kurz vor dem schließenden Tag der Session-Factory findet hier die Zuordnung mit der Datenbank statt.
Normalerweise müssen wir für Generatorelemente den Typ Integer verwenden und die Änderung auch in der Datenbank vornehmen.
Als zusätzliche Filterung können wir nach der Hauptabfrage eine 'where'-Klausel hinzufügen. Hier ist nur die Join-Bedingung erforderlich und wird bereits vom Ruhezustand behandelt.