spring-data多表多條件動態查詢

一、表對應關係

1、HdTalent,HdStaffPool  多對一關係,其中HdTalent爲多方,HdStaffPool  爲一方。

2、HdTalentPool,HdTalent  多對一關係,其中HdTalentPool爲多方,HdTalent  爲一方。

3、由此HdTalentPool、HdStaffPool  組成多對多的關係。

二、需求描述

需要根據HdTalentPool中名稱查詢HdStaffPool  ,且HdStaffPool 的屬性爲動態條件查詢。

三、實現過程

 

spring-data的的dao爲Repsitory,需要繼承JpaRepository,JpaSpecificationExecutor接口。如下圖:

只需要調用findAll方法,傳入動態參數即可。首先需要進行動態連接,關鍵代碼如下:

List<Predicate> predicates = new ArrayList<>();

/// HdTalent,HdStaffPool表進行內聯

Join<HdTalent,HdStaffPool> talentJoin=root.join("hdTalents",JoinType.INNER);

// HdTalentPool,HdTalent表進行內聯

Join<HdTalentPool,HdTalent> talentPoolJoin =talentJoin.join("hdTalentPool",JoinType.INNER);

predicates.add(cb.like(talentPoolJoin.get("talentName"),conditions.get("talentName").toString()));

備註:3張表建立1對多的關係。參考百度搜索OnetoMany與ManyToOne有很多資料。

完整代碼截圖如下:

四、JUNIT測試過程

測試代碼

執行結果

五、ManyToOne與OneToMany

ManyToOne

OneToMany

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章