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

时间:2017-08-17 12:12:44

标签: java spring spring-data spring-data-jpa

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

这是我的方法

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

但它给了我一个例外

  

引起:org.springframework.data.mapping.PropertyReferenceException:没有找到类型为String的属性!遍历路径:FilePdf.fileName。

更新 这是我的存储库

 public interface FilePdfRepository extends JpaRepository<FilePdf, Long> {
    Page<FilePdf> getByFileNameContainingInAndExtension(Collection<String> fileNames, String extension, Pageable pageable);
}

这是我的实体

@Entity
@Table(name = "dlfileentry")
public class FilePdf {
    @Id
    @Column(name = "uuid_")
    private String id;
    @Column(name = "fileentryid")
    private Integer fileEntryId;
    @Column(name = "groupid")
    private Integer groupId;
    @Column(name = "filename")
    private String fileName;
    @Column(name = "folderid")
    private Integer folderId;
    @Column(name = "extension")
    private String extension;
}

3 个答案:

答案 0 :(得分:1)

使用 findBy 代替 getBy

使用 关键字

 public interface FilePdfRepository extends JpaRepository<FilePdf, Long> {
        Page<FilePdf> findByFileNameInAndExtension(Collection<String> fileNames, String extension, Pageable pageable);
    }

参见文档:https://docs.spring.io/spring-data/jpa/docs/1.11.6.RELEASE/reference/html/

答案 1 :(得分:0)

问题的根本原因是adjacency_list关键字不属于Spring Data JPA。

ContainingIn关键字仅支持单个值,而不支持集合。

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

Containing

答案 2 :(得分:0)

如果要使用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;
    }