【发布时间】:2021-02-26 01:15:22
【问题描述】:
我阅读了 Spring Data JPA 并发现要编写自定义查询,我们可以使用 Criteria API,但这个 API 似乎没有全文搜索。有谁能帮我在 Spring Boot 项目中实现这个?
【问题讨论】:
标签: java spring-boot spring-data-jpa
我阅读了 Spring Data JPA 并发现要编写自定义查询,我们可以使用 Criteria API,但这个 API 似乎没有全文搜索。有谁能帮我在 Spring Boot 项目中实现这个?
【问题讨论】:
标签: java spring-boot spring-data-jpa
您可以使用规范 API 来做到这一点。
@Component
public class PostSpecification {
public static Specification<Post> search(String keyword) {
return ((root, criteriaQuery, criteriaBuilder) -> {
criteriaQuery.distinct(true);
if (keyword == null) {
return null;
}
return criteriaBuilder.or(
criteriaBuilder.like(root.get("title"), "%" + keyword + "%"),
criteriaBuilder.like(root.get("content"), "%" + keyword + "%"),
criteriaBuilder.like(root.get("excerpt"), "%" + keyword + "%"),
criteriaBuilder.equal(root.join("author").get("name"), keyword),
criteriaBuilder.equal(root.join("tags").get("name"), keyword.trim().toUpperCase())
);
});
}
}
@Repository
public interface PostRepository extends JpaRepository<Post, Long>, JpaSpecificationExecutor<Post> {
}
下面的方法将返回包含关键字的List<Post>。
postRepository.findAll(PostSpecification.search(keyword));
将在指定列中搜索关键字。
【讨论】: