嘿,我的查询有一个小问题。我需要找到具有特定能力的用户(如许可证和东西)。可以说我有能力的用户:亚历克斯:A、B、C约翰:A,B史蒂夫:B,C要求:workers?competences=A,B,C - 应该只返回 Alex目前返回 Alex 3 次,John 和 Steve 两次workers?competences=A,C - 应该只返回 Alex目前返回亚历克斯两次,约翰和史蒂夫一次workers?competences=B,C - 应该返回 Alex 和 Steve目前返回 Alex 两次,Steve 两次,John 一次workers?competences=B - 应该返回所有用户目前返回每个人一次目前,它会查找所有具有能力 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); }; }
1 回答
慕后森
TA贡献1802条经验 获得超5个赞
由于 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;
3是IN数组的长度
添加回答
举报
0/150
提交
取消