JPA 标准:有没有办法创建与列表完全匹配的规范?

问题描述 投票:0回答:1

例如我有一个班级用户像

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)

java jpa specifications
1个回答
0
投票

试试这个:

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;
    };
© www.soinside.com 2019 - 2024. All rights reserved.