Spring JPA聯表情況下的複雜查詢
之前Spring JPA簡單分頁查詢以及複雜查詢(範圍查詢,模糊查詢等)一篇整理了JPA列表查詢的幾種方式,但是遺漏了一個聯表查詢下,Specification怎麼查。還是以之前的Role表為例
package com.cwh.chl.manager.system.entity;
import javax.persistence.*;
/**
* 職位,角色
*/
@Entity
@Table(name = "role")
public class Role {
@Id
@Column
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
/**
* 職位名稱
*/
@Column
private String name;
/**
* 崗位數量
*/
@Column
private Integer num;
/**
* 是否總後臺職位,0:不是,1:是,2:門店區域經理
*/
@Column
private Integer is_manager;
/**
* 門店id
*/
@OneToOne()
@NotFound(action= NotFoundAction.IGNORE)
@JoinColumn(name = "storeId")
private Store store;
public Store getStore() {
return store;
}
public void setStore(Store store) {
this.store = store;
}
public Integer getIs_manager() {
return is_manager;
}
public void setIs_manager(Integer is_manager) {
this.is_manager = is_manager;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
這裡我們把之前的storeId配置了一個一對一對映,關聯了Store表。若是我們想要查詢role列表時,想篩選store門店名稱name為測試門店的所有role,此時可以通過Spetification的實現方法
public Predicate toPredicate(Root<Role> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder);中的root設定,
正常情況下我們通過Role表中欄位篩選時是這麼寫的
Predicate predicate2 = criteriaBuilder.equals(root.get("store_id").as(String.class),"1");
但是Store的門店名稱顯然不在Role表嚇,此時我們可以使用root.join(String val);來定位Store物件,
Predicate predicate2 = criteriaBuilder.equals(root.join("store").get("name").as(String.class),"測試門店");
是不是很簡單,如果有巢狀兩層的關聯是否可以直接root.join("XX").join("XX")的形式呢?
相關文章
- JPA的多表複雜查詢
- Spring JPA 聯表查詢Spring
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- Spring Data JPA + QueryDSL實現CRUD和複雜查詢案例Spring
- Spring Data JPA 實現聯表查詢Spring
- spring data jpa 多對一聯表查詢Spring
- Spring Data JPA 實現多表關聯查詢Spring
- spring data jpa查詢Spring
- 複雜查詢—子查詢
- JPA多表關聯查詢
- SQL 複雜查詢SQL
- Spring JPA 定義查詢方法Spring
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- oracle表複雜查詢Oracle
- Solr複雜查詢一:函式查詢Solr函式
- Laravel使用MongoDB複雜的查詢LaravelMongoDB
- spring data JPA 模糊查詢 --- 使用 LIKE --- 的寫法Spring
- spring data jpa關聯查詢(一對一、一對多、多對多)Spring
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- SQL學習(三) 複雜查詢SQL
- linux中查詢find命令的複雜用法Linux
- Spring Boot中使用JPA構建動態查詢Spring Boot
- 探討一個比較複雜的查詢
- 基於 MongoTemplate 實現MongoDB的複雜查詢MongoDB
- 如何完成複雜查詢的動態構建?
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- JPA 連表查詢
- es的複雜查詢測試,使用jest的dsl工具寫查詢語句
- 複雜查詢還是直接寫sql吧SQL
- 微服務複雜查詢之快取策略微服務快取
- jpa一對多查詢
- JPA時間段查詢
- jpa 聯合查詢資料,查詢使用者資訊與部門資訊
- 寫一個“特殊”的查詢構造器 – (四、條件查詢:複雜條件)
- mybatis plus 使用LambdaQueryWrapper設定複雜的條件查詢MyBatisAPP
- SpringBoot Jpa多條件查詢Spring Boot
- 關於 Elasticsearch nested field /script 的一些複雜查詢Elasticsearch