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