Hibernar la diferencia entre la conexión urgente y la conexión ordinaria
La introducción y la explicación relevantes se han comentado en el código, por lo que puede consultarlo.
paquete com.baidu.test; import java.util.arrayList; import java.util.linkedhashset; import java.util.list; import org.hibernate.Query; importar org.hibernate.session; import. org. com.baidu.leftjoin.Employee; public class testHQL_LEFTJOIN {private sessionFactory sessionFactory; session private session; private transaction Transaction; @bebore public void init () {Configuration Configuration = New Configuration (). Configuración (); ServiceReGistry ServiceRegistry = New ServiceRegistryBuuder () .applysettings (Configuration.GetPerTies () (ServiceReGistry) .BuildServiceRegistry (); sessionFactory = Configuration.BuildSessionFactory (ServiceRegistry); session = sessionFactory.opensession (); transacción = session.begintransaction ();}@después de public void destruye () {transaccion.commit (); session.close (); sessionFactory.close ();} /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~. Muchos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/**** Erección La unión externa izquierda: las características son: la tabla izquierda no cumple con las condiciones, la mesa izquierda no cumple con las condiciones* 1. La palabra clave de la izquierda representa la palabra clave de la urgente de la urbente. * 2. El método list () almacena referencias a objetos de entidad en el conjunto devuelto. La colección de empleados asociada con cada objeto de departamento se inicializa * almacena todos los objetos de entidad asociados. * 3. El resultado de la consulta puede contener elementos duplicados, y los elementos duplicados pueden filtrarse a través de un hashset * * Deduplicación: * Método 1: Use distinto * String hql = "Seleccione D distintivo D del departamento d Left Join Fetch D.Emps"; * Consulta consulta = session.createQuery (HQL); * * Lista <Sc.> Dropes = Query.List (); * System.out.println (deppts.size ()); * * Método 2 * String hql = "Del Departamento D Left Loin Fetch D.Emps"; * Consulta consulta = session.createQuery (HQL); * * Lista <Sc. del Departamento> Depts = Query.List (); * * Depts = new ArrayList <> (new Linkedhashset (departamento)); * System.out.println (deppts.size ()); * * para (departamento departamentos: departamento) { * system.out.println (dept.getName () + "-" + departamento *} * * * */@Test public void testleftJoinfetch () {// string hql = "Seleccione distinto D Del Departamento D de Departamento Left Fetch D.Emps"; // Query Query = Session.CreateQuery (hql); // // list <Sconts> de departamento = Query.list (); // System.out.Println (Depts.size (); Unir fetch d.emps "; consulta query = session.createQuery (HQL); Lista <Sc. del departamento> defics = query.list (); System.out.println (deppts.size ()); departamento = new ArrayList <> (new LinkedHashset (depts)); System.Println (dePTS.SIZE ()); For (departamento (departamento (departamento (departamento de Departamento)); Dept: departamento) {system.out.println (de departamento de dept.getName () + "-" + de departamento de gets (). size ());}}/** * Left Experior Join: * 1. La palabra clave de unión izquierda representa una consulta de unión externa izquierda. * 2. El tipo de matriz de objetos se almacena en la colección devuelta por el método list () * 3. Determine la estrategia de búsqueda de la colección de empleados en función del archivo de configuración. * 4. Si desea que la colección devuelta por el método list () contenga solo objetos de departamento, * puede usar la palabra clave Seleccionar en las declaraciones de consulta HQL * * Los resultados de dicha consulta de instrucción se duplican: * String hql = "del departamento d Left D.Emps"; * Consulta consulta = session.createQuery (HQL); * * List <object []> resultados = query.list (); * System.out.println (results.size ()); * * Deduplicación: * Solo use un método distintivo para eliminar la duplicación * * String hql = "Seleccione distinto D Del Departamento d Left. * Consulta consulta = session.createQuery (HQL); * * Lista <Sc. del Departamento> Depts = Query.List (); * System.out.println (deppts.size ()); * * para (departamento departamentos: departamento) { * system.out.println (dept.getName () + depto.getEmps (). size ()); *} * * */@Test public void testleftJoin () {String hql = "Seleccione distinto D Del departamento d izquierda unión d.emps"; consulta consulta = session.createQuery (hql); list <scontion> depts = query.list (); system.println (depts.size (); for (departamento (departamento departamento: departamento) {system.out.println (departamento de dept.getName () + deTpt.getEmps (). size ());}}/*** Conexión interna impulsiva: las características son: no devolver la tabla izquierda pero no cumple con la condición de la lista de la elección de la unión interna que representa una conexión interna urgente, y la clave de la clave de la colección también se puede omitir la lista de la lista (). Objetos, cada departamento * La recopilación de empleados del objeto se inicializa, almacenando todos los objetos de empleados asociados * * Conexiones internas: * La palabra clave de unión interna representa una conexión interna, y la palabra clave interna también se puede omitir. Un registro del resultado de la consulta de cada elemento almacenado en el conjunto de métodos list () es el tipo de matriz de objetos. Cada elemento es el tipo de matriz de objetos * Si desea que la colección devuelta por el método list () solo contenga objetos de departamento, puede usar la palabra clave seleccionar en la instrucción de consulta hql * * * */@test public void testInnerJoinfetch () {// string hql = "seleccionar distinto d de departamento d izquierdo unir fetch d.emps"; string hql = "de departamento dinner d.sion fetchemps"; query query = query query = querer session.createQuery (HQL); Lista <Sc.> depts = query.list (); deTpts = new ArrayList <> (new LinkedHashSet (departamento)); System.out.Println (dePT.Size ()); for (departamento departamentos: dePTS) {System.Println (dePT.getName () + "-"-"") );}} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void testleftJoInfetch2 () {String hql = "De Employee E Left Join Fetch E.Dept"; Query Query = Session.CreateQuery (HQL); List <Empleado> Emps = Query.List (); System.out.println (emps.size ()); para (Empleado EMP: Emps) {System.out.Println (Emp + " -" - "" emp.getDept ());}}}Resumir
Lo anterior es el contenido completo de este artículo sobre la diferencia entre la conexión urgente hibernada y la conexión ordinaria. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
Una breve discusión sobre el problema de carga urgente de Hibernate (Asociación de Clave Exterior Múltiple)
Explicación detallada del código de operación para agregar, eliminar, modificar y buscar en Hibernate
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!