Hibernate4详解(十三)

2014-11-24 10:41:08 · 作者: · 浏览: 8
(int i = 0; list != null && i < list.size(); i++) {
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 list = query.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 list = query.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 list = criteria.list();
showCustomer(list);
session.close();
}

// 打印Order信息
private void showCustomer(List list) {
for (Customer customer : list) {
System.out.println(customer);
if (customer.getOrders() != null && customer.getOrders().size() > 0) {
Set orders = customer.getOrders();
for (Iterator it = orders.iterator(); it.hasNext();) {
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()