Hibernar a diferença entre conexão urgente e conexão comum
A introdução e explicação relevantes foram comentadas no código, para que você possa consultar.
package com.baidu.test;import java.util.ArrayList;import java.util.LinkedHashSet;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.Serviceregistry; importar org.hibernate.service.serviceregistryBuilder; importar org.junit.after; importar org.junit.before; pictorg.junit.test; import com.Baidu.leftJEM.eTtment; {session privado Factoryfactory; sessão privada sessão; transação privada transação;@antes public void init () {Configuration Configuration = new Configuration (). Configure (); Serviceregistry serviceregistry = new ServiceRegistryBuilder () .ApplateSettings (Configuration.getProties (). Configuration.BuildSessionFactory (ServiceRegistry); session = sessionFactory.opensssion (); transaction = session.begIntransaction ();}@após public void Destroy () {transaction.Commit (); session.close (); session.close ();} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ Muitos ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/**** ereção a junção externa esquerda: os recursos são: se a tabela esquerda não atende às condições, a tabela esquerda não atende a uma esquerda* 1. A junção esquerda pegam. * 2. O método list () armazena referências a objetos de entidade no conjunto retornado. A coleção de funcionários associada a cada objeto de departamento é inicializada, * armazena todos os objetos da entidade associada. * 3. O resultado da consulta pode conter elementos duplicados e os elementos duplicados podem ser filtrados através de um hashset * * Deduplicação: * Método 1: use distinto * string hql = "selecione distinto d do departamento D de junção esquerda Fetch d.emps"; * Query Query = Session.CreateQuery (HQL); * * LIST <ECTISTion> Depths = query.list (); * System.out.println (depts.size ()); * * Método 2 * String HQL = "Do Departamento D esquerda Junção Fetch d.emps"; * Query Query = Session.CreateQuery (HQL); * * LIST <ECTISPOND> DEPTS = query.list (); * * Depts = new ArrayList <> (new LinkedHashSet (depts)); * System.out.println (depts.size ()); * * para (departamento de departamento: depts) { * System.out.println (dept.getName () + "-" + Dept.getemps (). size ()); *} * * */@Teste public void testleftJoinFetch () {// string hql = "Selecione distinto d do departamento d junção esquerda Fetch d.emps"; // Query Query = session.CreateQuery (HQL); // // list <departamento> depts = Query.list (); // System.It.Iltl); Junte -se a buscar d.emps "; Query Query = session.CreateQuery (HQL); List <Parpice> depts = query.list (); System.out.println (depts.size ()); depts = new ArrayList <> (new LinkedHashSet)); System.out.Println (departamentos <> Departamento: depts) {System.out.println (Dept.getName () + "-" + Dept.getemps (). size ());}}/** * JONA externa esquerda: * 1. A palavra-chave de junção esquerda representa uma consulta de junção externa esquerda. * 2. O tipo de matriz de objetos é armazenado na coleção retornada pelo método LIST () * 3. Determine a estratégia de pesquisa da coleção de funcionários com base no arquivo de configuração. * 4. Se você deseja que a coleção retornasse pelo método list () para conter apenas objetos de departamento, * você pode usar a palavra -chave selecionar em declarações de consulta HQL * * Os resultados de uma consulta de instrução são duplicados: * String HQL = "do Departamento D deixou a junção d.emps"; * Query Query = Session.CreateQuery (HQL); * * List <object []> resulta = query.list (); * System.out.println (Results.size ()); * * Deduplicação: * Use apenas o método distinto para remover a duplicação * * String hql = "Selecione distinta d do departamento D de junção D.emps"; * Query Query = Session.CreateQuery (HQL); * * LIST <ECTISPOND> DEPTS = query.list (); * System.out.println (depts.size ()); * * para (Departamento de Departamento: Depts) { * System.out.println (Dept.getName () + Dept.getemps (). size ()); *} * */@Teste public void testleftJoin () {string hql = "Selecione distinto d do departamento D de junção D.emps"; Query Query = session.CreateQuery (HQL); list <PofemM> depts = query.list (); System.out.println (Depts.size ()); para (departamento.list (); dept:depts){System.out.println(dept.getName() + dept.getEmps().size());}}/** * Impulsive internal connection: Features are: Do not return the left table but does not meet the conditions* INNER JOIN FETCH keyword represents an urgent internal connection, and the INNER keyword can also be omitted * The list() method stores Department in the collection returned by the collection Reference to Objetos, cada departamento * A coleção de funcionários do objeto é inicializada, armazenando todos os objetos dos funcionários associados * * conexões internas: * Palavra -chave de junção interna representa uma conexão interna e a palavra -chave interna também pode ser omitida. Um registro do resultado da consulta de cada elemento armazenado no conjunto de métodos list () é o tipo de matriz de objetos. Cada elemento é o tipo de matriz de objetos * Se você deseja que a coleção retorne pelo método list () para conter apenas objetos de departamento, você pode usar a palavra -chave selecionada na declaração de consulta HQL * * * */@teste public void testInnerJoinFetch () {// string hql = "selecione distinto DA departamento dinner Drening Fetch d.emps"; session.CreateQuery (HQL); List <O departamento> depts = query.list (); depts = new ArrayList <> (new LinkedHashSet (depts)); System.out.println (deptln.size ()); para (departamento dept: dept) {System.out.println (de departamento); );}} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@Test public void testleftJoinFetch2 () {String hql = "do funcionário e a partida esquerda Fetch E.Dept"; Query Query = Session.CreateQuery (HQL); List <Pomense> Emps = query.list (); System.out.println (Emps.size ()); (empym emp: emps) {system.systrln.P (Emps). Emp.getDept ());}}}Resumir
O exposto acima é o conteúdo completo deste artigo sobre a diferença entre a conexão urgente de hibernação e a conexão comum. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
Uma breve discussão sobre o problema de carregamento urgente do hibernato (associação múltipla de chave estrangeira)
Explicação detalhada do código de operação para adicionar, excluir, modificar e pesquisar em Hibernate
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!