孙卫琴的《精通JPA与Hibernate》的读书笔记: JPQL和QBC的各种连接查询

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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对象,
//此时需要调用CriteriaQuery的multiselect()方法</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java技术集锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值