【问题标题】:How to get only those objects whose subarrays in the arrays match the requested one with SQL and Hibernate?如何仅获取数组中子数组与 SQL 和 Hibernate 请求的对象匹配的那些对象?
【发布时间】:2022-05-08 22:13:50
【问题描述】:

我有包含标签数组的项目对象(例如,后端、前端、销售、营销)。

用户设置所需的参数,例如后端和前端。它是标签数组。

我需要找到所有项目,其中标签包括后端和前端。

我可以使用 IN 运算符 (SQL) 编写类似的内容,但它会选择包含后端或前端的元素,而不是这两个标签一起。

例如,我的 JPA Repository 方法如下所示:

List<Project> findProjectsByNameContainingAndTagListNameInOrderById(String name, List<String> tagNameList, Pageable pageable);

然后我得到一个这样的列表,其中的数组包含至少 1 个请求的子数组的元素。为了消除所有不必要的,我使用这种方法:

    // Delete All Projects Which Don't Have All Tags From TagNameList

    private void deleteSameTags(@RequestParam(required = false) List<String> tagNameList, Set<Project> projects) {

        //...

        projects.removeIf(project -> !project.getTagList().containsAll(tagNameList));

    }

它现在对我有帮助,但我认为这可以使用 SQL 或 Hibernate 以更简单、更方便的方式实现。

【问题讨论】:

标签: java sql spring postgresql hibernate


【解决方案1】:

你可以使用这样的东西

select p from Project p join p.tagList t
where t in :tags group by p.id having count(p.id) = :tagCount

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多