选择具有所有IN列表引用的行

很多

我有以下模型和存储库:

(跳过所有不相关的字段和获取/设置者)

public class Contact {

    @Id
    private Integer id;

    private String name;

    @ManyToMany
    private List<TargetGroup> targetGroups = new ArrayList<>();

}
public class TargetGroup {

    @Id
    private Integer id;

    @NotBlank
    private String name;

}
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {

    @Query("SELECT c FROM Contact c JOIN c.targetGroups tg " +
            "WHERE (tg.id IN :targetGroups)")
    Page<ContactView> customFilterWithTargetGroups(@Param("targetGroups") Set<Integer> targetGroups, Pageable pageable);

}

简而言之,customFilterWithTargetGroups方法返回具有提供的目标组ID之一的联系人。这很好。

现在,我需要选择具有所有提供的目标组ID的联系人。JPA有可能吗?

我所能想到的就是手动将查询构造为字符串,然后使用实体管理器执行查询,但这带来了无数其他问题(分页,排序,投影以及JPA存储库为您提供的所有便利)。而且我也不知道怎么做:-)

所以我想知道是否可能有一个简单的解决方案。

很多

最后,正如@Thomas所指出的,这里已经存在解决我的问题的方法- 使用jpql查找包含给定集合的所有元素的集合的项

我决定在这里分享我的问题的确切解决方案代码,也许它将对某人有所帮助:

@Query("SELECT c FROM Contact c JOIN c.targetGroups tg " +
            "WHERE (tg.id IN :targetGroups)" +
            " GROUP BY c.id HAVING count(c.id) = :groupsCount")
    Page<ContactView> customFilterWithTargetGroups (@Param("targetGroups") Set<Integer> targetGroups, @Param("groupsCount") long groupsCount, Pageable pageable);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python合并两个具有所有可能排列的列表

具有所有核心的Gzip

MySql:选择具有所有值的项目

Pandas Dataframe:将具有列表的行扩展为具有所有列所需索引的多行

大量选择以产生具有所有唯一值的2D数组

删除在某些列中具有所有NA的行

sqlalchemy,选择具有所有标签的对象

Rails / React:引用必须具有所有者

选择具有所有其他ID都不是'this.id'的元素

删除第一行之后具有所有NA的所有行

除去第一列以外具有所有NA的行

如何选择具有所有“列”值且具有相同值的行?

角组件引用不具有所有属性

postgres选择varchar []列中具有任何列表字符串的所有行

选择仅在R中具有所有非零列的行

从列表中的data.frames删除具有所有NA的行

选择具有所有纵向尺寸的行

a.gtld-servers.net是否具有所有.com域的列表?

将模型数据作为对象列表或具有所有者的每个对象

如何使用arcmain备份具有所有行但没有它们的表(仅结构)?

具有所有组合的紧缩单词列表生成

Dctrine DQL,正确获取具有所有引用和字段的整个实体

使用 Linq 仅查找在标志列表中具有所有匹配值的记录?

SQL:如何只选择给定组具有所有给定值的组?

通过laravel中的数据透视表选择具有所有选定选项的所有产品

如何选择具有相同 id 并在另一列中具有所有缺失值的行

在不是 NA 的最后一行之后删除所有具有所有 NA 值的行

选择具有所有最小值和给定值的下一个最大值的行

选择所有行值作为列表