jpa 连表查询怎么写
时间: 2023-07-13 14:06:48 浏览: 115
SpringBoot Data JPA 关联表查询的方法
5星 · 资源好评率100%
在 JPA 中,可以通过使用 JPQL(Java Persistence Query Language)或者 Criteria API 进行连表查询。下面分别介绍这两种方式的使用方法。
1. JPQL 连表查询
JPQL 是一种面向对象的查询语言,类似于 SQL。在 JPQL 中,可以使用 JOIN 子句进行连表查询。例如,查询订单和订单项的信息,可以使用以下语句:
```java
String jpql = "SELECT o, i FROM Order o JOIN o.orderItems i WHERE o.id = :orderId";
TypedQuery<Object[]> query = entityManager.createQuery(jpql, Object[].class);
query.setParameter("orderId", orderId);
List<Object[]> results = query.getResultList();
for (Object[] result : results) {
Order order = (Order) result[0];
OrderItem orderItem = (OrderItem) result[1];
// 处理查询结果
}
```
在上面的查询语句中,使用 `JOIN` 子句连接了 `Order` 实体和 `OrderItem` 实体,并且使用 `WHERE` 子句指定了查询条件。
2. Criteria API 连表查询
Criteria API 是一种类型安全的查询方式,可以通过 `Join` 接口进行连表查询。例如,查询订单和订单项的信息,可以使用以下代码:
```java
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]> criteria = builder.createQuery(Object[].class);
Root<Order> root = criteria.from(Order.class);
Join<Order, OrderItem> join = root.join("orderItems");
criteria.select(builder.array(root, join)).where(builder.equal(root.get("id"), orderId));
List<Object[]> results = entityManager.createQuery(criteria).getResultList();
for (Object[] result : results) {
Order order = (Order) result[0];
OrderItem orderItem = (OrderItem) result[1];
// 处理查询结果
}
```
在上面的代码中,通过 `Join` 接口连接了 `Order` 实体和 `OrderItem` 实体,并且使用 `where` 方法指定了查询条件。最后,通过 `createQuery` 方法执行查询并获取结果。
阅读全文