Oracle
 sql >> Base de données >  >> RDS >> Oracle

JOIN avec condition dans la requête HQL ?

Correspondant est HQL

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

Mais en HQL, il est préférable de récupérer l'objet entier afin que nous puissions également utiliser les autres propriétés

   from ADVRoheader header 
   inner join 
   header.advmagencymaster master

HQL ne dépend pas de la base de données sous-jacente. Il en sera de même pour toutes les bases de données (Oracle, Mysql, SQL Server, etc.). Nous devons uniquement modifier la connexion à la base de données dans le fichier de configuration principal.

Vos classes de modèles ressembleront à ceci

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}

Vous avez déjà défini une relation plusieurs à un en xml

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

Ainsi, lors du chargement de l'objet ADVRoheader, l'hibernation chargera également la référence d'objet interne "advmagencymaster".

pour cela, vous devez spécifier lazy="false" au lieu de fetch="select".

lazy="true" - le chargement paresseux ne chargera que l'objet parent

lazy-"false" - le chargement hâtif chargera l'objet enfant (interne) également avec l'objet parent.

ajoutez les deux fichiers hbm.xml dans le fichier de configuration principal (hibernate.cfg.xml) comme suit

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

juste avant la balise de fermeture de l'usine de session ici, le mappage se produit avec la base de données.

Habituellement, pour les éléments générateurs, nous devons utiliser le type entier et effectuer également le changement dans la base de données.

Filtrage supplémentaire, nous pouvons ajouter la clause 'where' après la requête principale. Ici, seule la condition de jointure est requise et elle est déjà gérée par hibernate.