Java 如何使用Spring数据查找集合中每个字符串的所有匹配项
我有一组字符串。我需要在数据库中找到包含此字符串的所有文件名。喜欢完全匹配的“喜欢(%KEYWORD%)” 这是我的方法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
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;
}