【发布时间】: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