Object[] obj = list.get(i);
Customer customer = (Customer) obj[0];
Order order = (Order) obj[1];
System.out.println((i + 1) + "---" + customer);
System.out.println((i + 1) + "---" + order);
}
session.close();
}
// 迫切内连接(推荐)
// select c.*,o.* from customers c inner join orders o on c.id=o.customer_id
@Test
public void test_inner_join_fetch() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
String hql = "select c from Customer c inner join fetch c.orders"; // inner 可省略
Query query = session.createQuery(hql);
query.setCacheable(true); // 设置缓存
List
showCustomer(list);
session.close();
}
// 迫切左外连接(推荐)
// select c.*,o.* from customers c left outer join orders o on c.id=o.customer_id
@Test
public void test_left_outer_join_fetch() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
String hql = "select c from Customer c left outer join fetch c.orders"; // outer可省略
Query query = session.createQuery(hql);
query.setCacheable(true); // 设置缓存
List
showCustomer(list);
session.close();
}
// 迫切左外连接(推荐)
// select c.*, o.* from customers c left outer join orders o on c.id=o.customer_id
@Test
public void test_left_outer_join_fetch_QBC() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(Customer.class).setFetchMode("orders", FetchMode.JOIN);
criteria.setCacheable(true); // 设置缓存
List
session.close();
}
// 打印Order信息
private void showCustomer(List
for (Customer customer : list) {
System.out.println(customer);
if (customer.getOrders() != null && customer.getOrders().size() > 0) {
Set
for (Iterator
Order order = it.next();
System.out.println(order);
}
}
}
}
}
缓存
Java代码
package org.springfuncs.cache;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springfuncs.domain.Emp;
import org.springfuncs.util.HibernateUtil;
public class TestCache {
// 测试Session缓存
@Test www.2cto.com
public void test_cache1() {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Emp emp1 = (Emp) session.get(Emp.class, 7369);
Emp emp2 = (Emp) session.get(Emp.class, 7369);
System.out.println(emp1 == emp2);
}
// 测试 EHCache缓存
// 配置缓存的话,会执行一条SQL,否则是2条SQL
@Test
public void test_cache2()