一、表對應關係
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