例如我有一个班级用户像
class User{
private String id;
private List<Company> companies;
}
还有一流公司
class Company{
private String id;
}
两者都是实体,我正在尝试通过公司 ID 与规范的精确匹配来过滤用户,例如
Specification<User> -> (root,query,builder) ->{
Join<User,Company> companyJoin = root.join("companies");
return builder.equal(companyJoin.get("id"),companyIdList);
}
我不想使用 builder.in 因为我想要用户公司 ID 的精确匹配,如下所示: user.getCompanies().stream().map(Company::getId).equals(companyIdList)
试试这个:
return (root, query, builder) -> {
Join<User, Company> companyJoin = root.join("companies");
// Create a predicate to match company IDs
Predicate[] predicates = new Predicate[companyIdList.size()];
for (int i = 0; i < companyIdList.size(); i++) {
predicates[i] = builder.equal(companyJoin.get("id"), companyIdList.get(i));
}
// Combine all predicates using AND
Predicate finalPredicate = builder.and(predicates);
return finalPredicate;
};