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
这是我目前的规格:
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;