1. 立即左外连接
以下程序覆盖映射代码中指定的检索策略,显式指定对与Customer关联的Order对象采用立即左外连接检索策略:
//JPQL检索方式
List<Customer> result=entityManager
.createQuery("from Customer c left join fetch c.orders o "
+"where c.name like 'T%' ",Customer.class)
.getResultList();
//QBC检索方式
CriteriaQuery<Customer> criteriaQuery =
criteriaBuilder.createQuery(Customer.class);
Root<Customer> root = criteriaQuery.from(Customer.class );
root.fetch("orders",JoinType.LEFT);
criteriaQuery.select(root);
Predicate predicate = criteriaBuilder.like(
root.get("name"),"T%");
criteriaQuery.where(predicate);
List<Customer> result=entityManager
.createQuery(criteriaQuery)
.getResultList();
以上代码生成的SQL查询语句为:
select c.ID C_ID ,c.NAME, c.AGE,
o.ID O_ID, o.ORDER_NUMBER, o.CUSTOMER_ID
from CUSTOMERS c left outer join ORDERS o on c.ID=o.CUSTOMER_ID
where (c.NAME like 'T%');
2. 左外连接
以下代码分别通过JPQL和QBC进行左外连接查询:
//JPQL检索方式
List<Object[]> result=entityManager
.createQuery("from Customer c left join c.orders "
+" where c.name like 'T%'",Object[].class)
.getResultList();
//QBC检索方式
//“Object[]”设定查询结果中的元素的类型
CriteriaQuery<Object[]> criteriaQuery =
criteriaBuilder.createQuery(Object[].class);
Root<Customer> root = criteriaQuery.from(Customer.class );
Join<Customer,Order> orderJoin=root.join("orders",JoinType.LEFT);
//由于查询结果中的每个元素都包含了Customer对象和Order对象,
//此时需要调用C

本文是孙卫琴《精通JPA与Hibernate》的读书笔记,详细介绍了JPQL和QBC中的各种连接查询,包括立即左外连接、左外连接、立即内连接、内连接、立即右外连接、右外连接、交叉连接和隐式连接,通过实例展示了如何使用这些连接方式进行数据查询。
最低0.47元/天 解锁文章
243

被折叠的 条评论
为什么被折叠?



