嘿,我的查询有一个小问题。
我需要找到具有特定能力的用户(如许可证和东西)。
让我们说我有能力的用户:
要求:
目前,它找到所有具有能力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);
};
}
由于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)
UPDATE
IN
是一个OR
条件。如果你想要name
只有所有能力,你应该做以下(假设能力不会有一个人的多个条目)
select name from competences where competence in ('A', 'B', 'C') group by name having count(name) = 3;
3
是IN
阵列的长度