Java 如何使用Spring数据查找集合中每个字符串的所有匹配项

Java 如何使用Spring数据查找集合中每个字符串的所有匹配项,java,spring,spring-data,spring-data-jpa,Java,Spring,Spring Data,Spring Data Jpa,我有一组字符串。我需要在数据库中找到包含此字符串的所有文件名。喜欢完全匹配的“喜欢(%KEYWORD%)” 这是我的方法 Page<FilePdf> getByFileNameContainingInAndExtension(Collection<String> fileNames, String extension, Pageable pageable); 使用findBy代替getBy 在关键字中使用 public interface FilePdfRepos

我有一组字符串。我需要在数据库中找到包含此字符串的所有文件名。喜欢完全匹配的“喜欢(%KEYWORD%)”

这是我的方法

  Page<FilePdf> getByFileNameContainingInAndExtension(Collection<String> fileNames, String extension, Pageable pageable);

使用findBy代替getBy

在关键字中使用

 public interface FilePdfRepository extends JpaRepository<FilePdf, Long> {
        Page<FilePdf> findByFileNameInAndExtension(Collection<String> fileNames, String extension, Pageable pageable);
    }
公共接口文件PDFRepository扩展了JpaRepository{
索引中的页面FindByFileName(集合文件名、字符串扩展名、可分页);
}

请参阅文档:

问题的根本原因是
ContainingIn
关键字不属于Spring数据JPA

包含关键字的
只支持单个值,不支持集合

考虑按如下方式更新存储库:

public interface FilePdfRepository extends JpaRepository<FilePdf, Long> {
    Page<FilePdf> getByFileNameContainingAndExtension(String fileName, String extension, Pageable pageable);
}
公共接口文件PDFRepository扩展了JpaRepository{
Page GetByFileName包含和扩展名(字符串文件名、字符串扩展名、可分页);
}

如果要使用querydsl进行查询,可以按以下方式形成JPAQuery:

Predicate finalPredicate(StringPath sp, List<String> filterValues) {
        BooleanBuilder bb = new BooleanBuilder();
        String value;
        for (Iterator arg2 = filterValues.iterator(); arg2
                .hasNext(); bb = bb.or(sp.containsIgnoreCase(value.trim().toLowerCase()))) {
            value = (String) arg2.next();
        }
        return bb;
    }
谓词最终预测(StringPath sp,列出筛选值){
BooleanBuilder bb=新的BooleanBuilder();
字符串值;
for(迭代器arg2=filterValues.Iterator();arg2
.hasNext();bb=bb.or(sp.containsIgnoreCase(value.trim().toLowerCase())){
value=(字符串)arg2.next();
}
返回bb;
}

您能发布实体和存储库定义吗?@SergeyBrunov,请查看更新plsWhat about?thanx以获取答案,但它在索引中找到了yFileName,但未找到与单词完全匹配的内容。
public interface FilePdfRepository extends JpaRepository<FilePdf, Long> {
    Page<FilePdf> getByFileNameContainingAndExtension(String fileName, String extension, Pageable pageable);
}
Predicate finalPredicate(StringPath sp, List<String> filterValues) {
        BooleanBuilder bb = new BooleanBuilder();
        String value;
        for (Iterator arg2 = filterValues.iterator(); arg2
                .hasNext(); bb = bb.or(sp.containsIgnoreCase(value.trim().toLowerCase()))) {
            value = (String) arg2.next();
        }
        return bb;
    }