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

Beispiel zur Unterscheidung zwischen dringender Verbindung und normaler Verbindung in Hibernate

Unterschied zwischen dringender Verbindung und normaler Verbindung von Hibernate

Die zugehörigen Erklärungen und Anleitungen sind im Code kommentiert, bitte referieren Sie sich daran.

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;
	@Before
	  public void init(){
		Configuration configuration = new Configuration().configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()}
		                    .applySettings(configuration.getProperties())
		                    .buildServiceRegistry();
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		session = sessionFactory.openSession();
		transaction = session.beginTransaction();
	}
	@After
	  public void destroy(){
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~Das folgende Beispiel ist von 1 Für viele ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	/**
   *
   * Dringende linke Außerverbindung: Der Vorteil ist: Wenn die linke Tabelle nicht den Bedingungen entspricht, wird auch die linke Tabelle mit nicht erfüllten Bedingungen zurückgegeben
   *    1. Der LEFT JOIN FETCH Schlüsselwort stellt die dringende linke Außerverbindung ab
   *    2. Die von der list() Methode zurückgegebene Sammlung enthält Referenzen auf Objekte, jede Employee-Sammlung, die mit einem Department-Objekt verknüpft ist, wird initialisiert
   *       . Enthält alle verknüpften Employee-Objekte
   *    3. Die Abfrageergebnisse können doppelte Elemente enthalten, doppelte Elemente können durch eine HashSet gefiltert werden
   *
   *     Entfernung von Duplikaten:
   *       Methode eins: Verwenden Sie 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());
   *       
   *       Methode zwei
   *         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() );
		}
	}
	/**
   * Linke Außerverbindung:
   *    1. Der LEFT JOIN Schlüsselwort stellt die linke Außerverbindung ab
   *    2. Die Sammlung, die von der list() Methode zurückgegeben wird, enthält Objekt-Array-Typen
   *    3. Die Abfragestrategie der Employee-Sammlung wird durch die Konfigurationsdatei bestimmt
   *    4. Wenn Sie möchten, dass die von list() Methode zurückgegebene Sammlung nur Department-Objekte enthält
   *      SELECT Schlüsselwort kann in HQL-Abfrageausdrücken verwendet werden
   *    
   *    Die Ergebnisse der Abfrage, die durch solche Anweisungen abgerufen werden, enthalten Duplikate:
   *      String hql = "FROM Department d LEFT JOIN d.emps";
   *      Query query = session.createQuery(hql);
   *    
   *      List<Object[]> results = query.list();
   *      System.out.println(results.size());
   *  
   *     Entfernung von Duplikaten:
   *       Es kann nur die Methode distinct verwendet werden, um Duplikate zu entfernen
   *   
   *       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());
		}
	}
	/**
   * Dringende innere Verbindung: Der Merkmal ist: Es werden keine Einträge der linken Tabelle zurückgegeben, die die Bedingungen nicht erfüllen
   *    Der INNER JOIN FETCH-Schlüssel stellt eine dringende innere Verbindung dar, der INNER-Schlüssel kann auch weggelassen werden
   *    Die Sammlung, die durch das list() -Verfahren zurückgegeben wird, enthält Referenzen auf Department-Objekte, jeder Department
   *        Die Employee-Sammlungen der Objekte werden initialisiert und enthalten alle verbundenen Employee-Objekte
   *
   * Innere Verbindung:
   *    Der INNER JOIN-Schlüssel stellt eine innere Verbindung dar, der INNER-Schlüssel kann auch weggelassen werden
   *    jedes Element im Set des list() -Verfahrens entspricht einem Eintrag der Abfrageergebnisse, jeder Eintrag ist ein Objektarray-Typ
   *    Wenn Sie möchten, dass die durch das list() -Verfahren zurückgegebene Sammlung nur Department-Objekte enthält, können Sie im HQL-Abfrageausdruck den SELECT-Schlüssel verwenden
   *
   *
   *
   */
	@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() );
		}
	}
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~Das folgende Beispiel ist von vielen zu vielen 1  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	@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());
		}
	}
}

Zusammenfassung

Dies ist der vollständige Inhalt der Beispiele zur Unterscheidung zwischen dringender Verbindung und normaler Verbindung in Hibernate, hoffentlich hilfreich für alle. Interessierte Freunde können weiterhin diese Website konsultieren:

Kurz zur dringenden Ladeproblematik von Hibernate (Mehrfach- Fremdschlüsselbeziehungen)

Detaillierte Code-Übersicht über Session-Zugriff, Hinzufügen, Ändern und Löschen in Hibernate

Falls es Unzulänglichkeiten gibt, freuen wir uns über Ihre Kommentare. Vielen Dank für die Unterstützung unserer Freunde!

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie urheberrechtlich relevante Inhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine E-Mail senden, um eine Meldung zu senden, und fügen Sie relevante Beweise bei. Bei nachgewiesener Täterschaft wird diese Website die beanstandeten urheberrechtlichen Inhalte sofort löschen.)

Empfohlene Artikel