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