首页 > 解决方案 > 子句中的 Criteria API(过滤)

问题描述

嘿,我的查询有一个小问题。

我需要找到具有特定能力的用户(如许可证和东西)。

可以说我有能力的用户:

要求:

目前,它会查找所有具有能力 A 或 B 或 C 的用户。

我需要它来返回具有所有插入权限的用户competence A AND competence B AND competence C

这是我目前的规范:

public static Specification<WorkDetail> hasCompetences(String searchTerm) {
        return (root, query, criteriaBuilder) -> {
            List<String> list = new ArrayList<>(Arrays.asList(searchTerm.split(",")));
            Join join = root.join("competences");
            return join.get("name").in(list);
        };
    }

标签: javaspring-bootcriteria-api

解决方案


由于 Alex 有 3 个结果。我认为您的表结构如下所示

name | competence
-----------------
Alex | A
Alex | B
Alex | C
John | A
John | B

您当前在 sql 中的查询可能看起来像

select name from competences where competence in ('A', 'B', 'C')

您可能想要添加distinct

select distinct name from competences where competence in ('A', 'B', 'C')

criteriaAPI 中似乎.distinct(true)

更新

IN是一个OR条件。如果您只想name拥有所有能力,您应该执行以下操作(假设能力不会有一个人的多个条目)

select name from competences where competence in ('A', 'B', 'C') group by name having count(name) = 3;

3IN数组的长度


推荐阅读