Hibernate 迫切连接和普通连接的区别
相关的介绍和解释在代码中已注释,大家可以参考。
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();
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~下面的例子是 从 1 对 多 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@Test
public void testLeftJoinFetch(){
// String hql = "SELECt DISTINCT d FROM Department d LEFT JOIN FETCH d.emps ";
// Query query = session.createQuery(hql);
//
// List depts = query.list();
// System.out.println(depts.size());
//
String hql = "FROM Department d LEFT JOIN FETCH d.emps ";
Query query = session.createQuery(hql);
List 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() );
}
}
@Test
public void testLeftJoin(){
String hql = "SELECt DISTINCT d FROM Department d LEFT JOIN d.emps";
Query query = session.createQuery(hql);
List depts = query.list();
System.out.println(depts.size());
for (Department dept:depts){
System.out.println(dept.getName() + dept.getEmps().size());
}
}
@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 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() );
}
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~下面的例子是 从多 对 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@Test
public void testLeftJoinFetch2(){
String hql = "FROM Employee e LEFT JOIN FETCH e.dept";
Query query = session.createQuery(hql);
List emps = query.list();
System.out.println(emps.size());
for (Employee emp:emps){
System.out.println(emp + " -- " + emp.getDept());
}
}
}
总结
以上就是本文关于Hibernate迫切连接和普通连接的区别实例详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
浅谈hibernate急迫加载问题(多重外键关联)
Hibernate中Session增删改查操作代码详解
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!



