sql >> Database >  >> RDS >> Oracle

JOINs met voorwaarde in HQL-query?

Overeenkomend is HQL

  select header.advmagencymaster.mamaid,
         header.advmagencymaster.mamaname,header.trohiono 
         from ADVRoheader header 

Maar in HQL is het beter om het hele object op te halen, zodat we de andere eigenschappen ook kunnen gebruiken

   from ADVRoheader header 
   inner join 
   header.advmagencymaster master

HQL is niet afhankelijk van de onderliggende database. Het is hetzelfde voor alle databases (Oracle, Mysql, SQL-server enz.). Alleen moeten we de databaseverbinding in het hoofdconfiguratiebestand wijzigen.

Je modelklassen zien er zo uit

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}

U heeft al een veel-op-een relatie gedefinieerd in xml

 <many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>

Dus tijdens het laden van de ADVRoheader-objectslaapstand wordt ook de interne objectreferentie "advmagencymaster" geladen.

hiervoor moet je lazy="false" specificeren in plaats van fetch="select".

lazy="true" - lui laden zal alleen het bovenliggende object laden

lazy-"false" - gretig laden zal het onderliggende (innerlijke) object ook met het bovenliggende object laden.

voeg beide hbm.xml-bestanden als volgt toe aan het hoofdconfiguratiebestand (hibernate.cfg.xml)

 <mapping resource="com/ADVRoheader.hbm.xml"></mapping>
 <mapping resource="com/ADVRomaster.hbm.xml"></mapping> 

net voor de sluitingstag van de sessiefabriek vindt hier de mapping plaats met Database.

Gewoonlijk moeten we voor generatorelementen het type integer gebruiken en de wijziging in de database ook doorvoeren.

Extra filtering kunnen we een 'where'-clausule toevoegen na de hoofdquery. Hier is alleen de voorwaarde voor samenvoegen vereist en deze wordt al afgehandeld door de slaapstand.



  1. Hoe ontkom ik aan vierkante haken in een LIKE-clausule?

  2. Is er een SQL-techniek om te bestellen door meerdere criteria te matchen?

  3. Verborgen functies in Oracle

  4. Google Cloud SQL is nu alleen-lezen