一、表对应关系
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