English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Esempio dettagliato della differenza tra connessione urgente e comune di Hibernate

La differenza tra la connessione urgente e la connessione comune di Hibernate

Le spiegazioni e le spiegazioni relative sono già commentate nel codice, si prega di fare riferimento.

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;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.baidu.leftJoin.Department;
import com.baidu.leftJoin.Employee;
public class TestHQL_LeftJoin {
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;
	@Prima
	  public void inizializza(){
		Configuration configuration = new Configuration().configura();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder();
		                    .applicaImpostazioni(configuration.getProperties());
		                    .costruisciServizioRegistrazione();
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		session = sessionFactory.openSession();
		transaction = session.beginTransaction();
	}
	@Dopo
	  public void distruggi(){
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~Esempio di 1 a molti sotto ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/**
   *
   * Connettione esterna sinistra urgente: le caratteristiche sono: se la tabella sinistra non soddisfa i criteri, viene anche restituita la tabella sinistra che non soddisfa i criteri
   *    1. La chiave LEFT JOIN FETCH rappresenta una strategia di ricerca di join esterno sinistro urgente.
   *    2. L'elenco restituito dal metodo list() contiene riferimenti agli oggetti entity, ogni insieme di Employee associato a un oggetto Department è stato inizializzato
   *       Contiene l'oggetto entity di tutti gli Employee associati.
   *    3. I risultati della query potrebbero contenere elementi duplicati, che possono essere filtrati utilizzando un HashSet
   *
   *     Rimozione duplicati:
   *       Metodo uno: utilizzare distinct
   *         String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
   *        Query query = session.createQuery(hql);
   *
   *        List<Department> depts = query.list();
   *        System.out.println(depts.size());
   *       
   *       Metodo due
   *         String hql = "FROM Department d LEFT JOIN FETCH d.emps ";
   *        Query query = session.createQuery(hql);
   *
   *        List<Department> depts = query.list();
   *
   *        depts = new ArrayList<>(new 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.createQuery(hql);
		//    
		//    List<Department> depts = query.list();
		//    System.out.println(depts.size());
		//    
		String hql = "FROM Department d LEFT JOIN FETCH d.emps ";
		Query query = session.createQuery(hql);
		List<Department> depts = query.list();
		System.out.println(depts.size());
		depts = new ArrayList<>(new LinkedHashSet(depts));
		System.out.println(depts.size());
		for (Department dept:depts){
			System.out.println(dept.getName() + "--" + dept.getEmps().size());
		}
	}
	/**
   * Connessione esterna a sinistra:
   *    1. La parola chiave LEFT JOIN rappresenta una query di connessione esterna a sinistra
   *    2. L'insieme restituito dal metodo list() contiene array di oggetti
   *    3. La strategia di ricerca dell'insieme Employee viene determinata dal file di configurazione
   *    4. Se si desidera che il metodo list() restituisca solo oggetti Department
   *      È possibile utilizzare la parola chiave SELECT nella query HQL
   *    
   *    Il risultato della query di questa sorta è duplicato:
   *      String hql = "FROM Department d LEFT JOIN d.emps";
   *      Query query = session.createQuery(hql);
   *    
   *      List<Object[]> results = query.list();
   *      System.out.println(results.size());
   *  
   *     Rimozione duplicati:
   *       Solo può essere utilizzato il metodo distinct per rimuovere duplicati
   *   
   *       String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN d.emps";
   *       Query query = session.createQuery(hql);
   *
   *       List<Department> 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 FROM Department d LEFT JOIN d.emps";
		Query query = session.createQuery(hql);
		List<Department> depts = query.list();
		System.out.println(depts.size());
		for (Department dept:depts){
			System.out.println(dept.getName() + dept.getEmps().size());
		}
	}
	/**
   *    Connessione interna urgente: caratteristica: non restituisce la tabella sinistra che non soddisfa i requisiti
   *    La chiave INNER JOIN FETCH rappresenta la connessione interna urgente, può essere omessa la parola chiave INNER
   *    La raccolta restituita dal metodo list() contiene riferimenti agli oggetti Department, ogni Department
   *        Tutti gli insiemi di oggetti Employee sono inizializzati, contengono tutti gli oggetti Employee associati
   *
   *    Connessione interna:
   *    La chiave INNER JOIN rappresenta la connessione interna, può essere omessa la parola chiave INNER
   *    Ogni elemento della raccolta del metodo list() corrisponde a una registrazione del risultato della query, ogni elemento è un tipo di array di oggetti
   *    Se desidera che la raccolta restituita dal metodo list() contenga solo oggetti Department, è possibile utilizzare la chiave SELECT nell'istruzione di query HQL
   *
   *
   *
   */
	@Test
	  public void testInnerJoinFetch(){
		//String hql = "SELECT DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
		String hql = "FROM Department d INNER JOIN FETCH d.emps ";
		Query query = session.createQuery(hql);
		List<Department> depts = query.list();
		depts = new ArrayList<>(new LinkedHashSet(depts));
		System.out.println(depts.size());
		for (Department dept:depts){
			System.out.println(dept.getName() + "--" + dept.getEmps().size());
		}
	}
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~Esempio di molti a uno ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	@Test
	  public void testLeftJoinFetch2(){
		String hql = "FROM Employee e LEFT JOIN FETCH e.dept";
		Query query = session.createQuery(hql);
		List<Employee> emps = query.list();
		System.out.println(emps.size());
		for (Employee emp:emps){
			System.out.println(emp + " -- " + emp.getDept());
		}
	}
}

Sommario

Questo è tutto il contenuto dell'articolo su Hibernate Connection Prompt e Connection Normale, spero che sia utile a tutti. Gli amici interessati possono continuare a consultare il nostro sito:

Breve discussione sul problema di caricamento immediato di Hibernate (associazioni esterne multiple)

Dettagli del codice di operazioni di creazione, eliminazione, aggiornamento e ricerca di Sessione in Hibernate

Se c'è qualcosa di insufficiente, ti preghiamo di lasciare un commento. Grazie per il supporto dei amici di questo sito!

Dichiarazione: il contenuto di questo articolo è stato prelevato dalla rete, il diritto d'autore spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare