我有一系列字符串。我需要在数据库中找到包含此字符串的所有文件名。像完全匹配“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;
}
答案 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;
}