JPA 中的连接查询详解
1. JPA 连接查询概述
JPA 提供了四种在查询中表达(内连接和外连接)的方式:
- 隐式关联连接:使用路径表达式。
- 普通连接:在 FROM
子句中使用连接运算符。
- 获取连接:在 FROM
子句中使用连接运算符和 FETCH
关键字进行立即获取。
- Theta 风格连接:在 WHERE
子句中使用。
下面将详细介绍这四种连接方式。
2. 隐式关联连接
在 JPA 查询中,无需显式指定连接条件,只需指定映射的 Java 类关联的名称。这就如同在 SQL 中使用外键约束名称来表达连接条件一样,是一种语法糖,使用起来更加方便。
2.1 示例
以 Bid
实体类和 Item
实体类的多对一关联为例, Bid
类中有一个名为 item
的多对一关联。在查询中引用该关联时,Hibernate 可以根据映射信息推导出连接表达式。
// JPQL 查询
select b from Bid b where b.item.name like 'Fo%'
// Criteria 查询
Root<Bid> b = criteria.from(Bid.class);
criteria.select(b).where(
cb.l