Oracle
 sql >> Datenbank >  >> RDS >> Oracle

JOINs mit Bedingung in HQL-Abfrage?

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".

angeben

lazy="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.