Java 第条中的标准API(过滤)

Java 第条中的标准API(过滤),java,spring-boot,criteria-api,Java,Spring Boot,Criteria Api,嘿,我的问题很小 我需要找到具有特定能力(如许可证等)的用户 假设我有一些有能力的用户: 亚历克斯:A,B,C 约翰:A,B 史蒂夫:B,C 要求: 工人?能力=A、B、C-应仅返回Alex 目前返回亚历克斯三次,约翰和史蒂夫两次 工人?能力=A,C-应仅返回Alex 目前返回亚历克斯两次,约翰和史蒂夫一次 工人?能力=B,C-应返回Alex和Steve 目前返回亚历克斯两次,史蒂夫两次和约翰一次 工人?能力=B-应返回所有用户 当前返回所有人一次 目前,它可以找到所有具

嘿,我的问题很小

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

假设我有一些有能力的用户:

  • 亚历克斯:A,B,C
  • 约翰:A,B
  • 史蒂夫:B,C
要求:

  • 工人?能力=A、B、C-应仅返回Alex
    • 目前返回亚历克斯三次,约翰和史蒂夫两次
  • 工人?能力=A,C-应仅返回Alex
    • 目前返回亚历克斯两次,约翰和史蒂夫一次
  • 工人?能力=B,C-应返回Alex和Steve
    • 目前返回亚历克斯两次,史蒂夫两次和约翰一次
  • 工人?能力=B-应返回所有用户
    • 当前返回所有人一次
目前,它可以找到所有具有能力A、B或C的用户

我需要它返回具有所有插入能力的用户,因此
能力A和能力B以及能力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);
        };
    }
公共静态规范有能力(字符串搜索术语){
返回(根、查询、准则生成器)->{
列表列表=新的ArrayList(Arrays.asList(searchTerm.split(“,”));
Join-Join=root.Join(“能力”);
在(列表)中返回join.get(“name”);
};
}

因为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')
标准
API中,哪一个似乎是
。不同的(真)

更新

中的
是一种
条件。如果你只想拥有所有的能力,你应该做到以下几点(假设一个人的能力不会有多个条目)


3
数组中
的长度

,因此现在它不会返回重复的用户,这是向前的一步,但它仍然会提供所有具有?能力=a、B、C的用户,而它应该只返回Alex。它将返回所有用户的A、B或C。我需要它是A、B和C:/事实证明,我毕竟需要or变量,但更新似乎合乎逻辑!
select name from competences where competence in ('A', 'B', 'C') group by name having count(name) = 3;