Hiberner la différence entre la connexion urgente et la connexion ordinaire
L'introduction et l'explication pertinentes ont été commentées dans le code, vous pouvez donc vous y référer.
package com.baidu.test; import java.util.arraylist; import java.util.linkedhashset; import java.util.list; import org.hibernate.query; import org.hibernate.ession; org.hibernate.service.serviceRegistry; import org.hibernate.service.serviceRegistryBuilder; import org.junit.after; import org.junit.before; import org.Junit.test; import com.baidu.leftjoin.destartement; importer com.baidu.leftjoin.employee; TestHQL_LeftJoin {Session Private Session SessionFactory; Session Private Session; Transaction de transaction privée; @Before public void init () {Configuration Configuration = New Configuration (). Configure (); ServiceRegistry ServiceGistry = New ServiceRegistryBuilder () .ApplySettings (Configuration.getProperties ()). Configuration.BuildSessionFactory (ServiceRegistry); session = sessionfactory.opencession (); transaction = session.begintransaction ();} @ après public void destren () {transaction.commit (); session.close (); sessionfactory.close ();} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~ Beaucoup de ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ / ** * * Érection Left de la jointure extérieure gauche: Les fonctionnalités sont: si le tableau de la clé de gauche ne remplit pas la stratégie de la jointure de la gauche de la gauche. * 2. La méthode list () stocke les références aux objets d'entité dans l'ensemble renvoyé. La collection d'employés associée à chaque objet de département est initialisée *, stocke tous les objets d'entité associés. * 3. Le résultat de la requête peut contenir des éléments en double et les éléments en double peuvent être filtrés via un hashset * * Deduplication: * Méthode 1: Utilisez une chaîne distincte * HQL = "SELECT DISTICUL D FROM DROING D Left join farch d.emps"; * Query Query = Session.CreateeQuery (HQL); * * List <p un département> Depths = query.list (); * System.out.println (Depts.size ()); * * Méthode 2 * String hql = "du département D gauche join fetch d.emps"; * Query Query = Session.CreateeQuery (HQL); * * List <p un département> Depts = Query.List (); * * Depts = new ArrayList <> (nouveau LinkedHashSet (Depts)); * System.out.println (Depts.size ()); * * for (Department Dept: Depts) {* System.out.println (dept.getName () + "-" + dept.getEmps (). size ()); *} * * * / @ Test public void testleftjoinfetch () {// string hql = "select distinct d From Department D Left join fetch d.emps"; // query query = session.createequery (hql); // list <p undeple> Depts = query.list (); // System.out.println (depts.Size ()); Fetch D.Emps "; Query Query = Session.CreateEquery (HQL); list <p undeple> Depts = Query.List (); System.out.println (Depts.Size ()); Depts = New ArrayList <> (New LinkedHashSet (Depts)); System.out.println (Depts.Size ()); pour (Depaders Dept: Depts) {System.out.println (Dept.getName () + "-" + Dept.getEmps (). size ());}} / ** * Left de jointure extérieure: * 1. Le mot clé de la jointure gauche représente une requête de jointure extérieure gauche. * 2. Le type de tableau d'objets est stocké dans la collection renvoyée par la méthode List () * 3. Déterminez la stratégie de recherche de la collection d'employés en fonction du fichier de configuration. * 4. Si vous souhaitez que la collection soit renvoyée par la méthode List () pour contenir uniquement les objets du département, * vous pouvez utiliser le mot-clé sélectionné dans les instructions de requête HQL * * Les résultats d'une telle requête de déclaration sont dupliqués: * String hql = "From Department D Left joind d.emps"; * Query Query = Session.CreateeQuery (HQL); * * Liste <objet []> Results = Query.List (); * System.out.println (results.size ()); * * Deduplication: * Utilisez uniquement la méthode distincte pour supprimer la duplication * * String hql = "SELECT DISTICT D FROM Department D Left Join D.EMPS"; * Query Query = Session.CreateeQuery (HQL); * * List <p un département> Depts = Query.List (); * System.out.println (Depts.size ()); * * for (Department Dept: Depts) {* System.out.println (dept.getName () + dept.getEmps (). size ()); *} * * / @ Test public void testleftjoin () {String hql = "select distinct d du département d gauche join d.emps"; query query. + Dept.getemps (). size ());}} / ** * Connexion interne impulsive: les fonctionnalités sont: ne renvoyez pas la table gauche mais ne remplit pas les conditions * Le mot-clé de la jointure interne représente une connexion interne urgente, et le mot-clé intérieur peut également être omis * Le service de la liste () de la méthode de la collection est renvoyé par la référence de la collection avec les objets, chaque département * La collection employée de l'employé est initiale, la référence de la collection, la référence de la collection, le département * Objets * * Connexions intérieures: * Le mot-clé intérieur Rejoint représente une connexion interne, et le mot-clé intérieur peut également être omis. Un enregistrement du résultat de la requête de chaque élément stocké dans l'ensemble de méthode liste () est le type de tableau d'objets. Chaque élément est le type de tableau d'objets * Si vous souhaitez que la collection soit renvoyée par la méthode List () pour contenir uniquement les objets du département, vous pouvez utiliser le mot clé Select dans l'instruction de requête HQL * * * * / @ @ test public void TestinnerJoinFetch () {// String hql = "Select Distinct D From Department D Le gauche de join Session.CreateEquery (HQL); list <p un département> Depts = Query.List (); Depts = new ArrayList <> (New LinkedHashset (Depts)); System.out.println (Depts.size ()); pour (Dept. Dept: Depts) {System.out.Println (Dept.getName () + "-" + Dept.Get (). );}} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @ Test public void testLeftJoinFetch2 () {String hql = "de l'employé e gauche join fetch e.dept"; query query = session.createery (hql); list <employee> emps = query.list (); system.out.println (emprint.size ()); pour (employee EMPS) {System.out.out.println (EMP + ". emp.getdept ());}}}Résumer
Ce qui précède est le contenu complet de cet article sur la différence entre la connexion urgente Hibernate et la connexion ordinaire. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Une brève discussion sur le problème de chargement urgent de l'hibernate (Association des clés étrangères multiples)
Explication détaillée du code d'opération pour ajouter, supprimer, modifier et rechercher dans Hibernate
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!