嘿,我的查询有一个小问题。
我需要找到具有特定能力(例如许可证和资料)的用户。
让我们说我的用户具有能力:
请求:
当前,它会找到具有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);
};
}
答案 0 :(得分:1)
由于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')
在criteria
API中似乎是.distinct(true)
更新
IN
是一个OR
条件。如果您只想name
具有全部能力,则应执行以下操作(假设一个人的能力不会有多个条目)
select name from competences where competence in ('A', 'B', 'C') group by name having count(name) = 3;
3
是IN
数组的长度