在所有列中搜索与Spring JPA匹配的关键字

我正在使用Spring Boot构建一个休息服务。我一直在使用Spring Data JPA进行查询,但是我乐于接受任何有助于解决问题的方法。

我想在任何列中找到具有匹配字符串的数据库中的所有条目。

FindAllBy(all 20 columns)(String parameter)SELECT * FROM AllColumns() WHERE parameter = "Foo";相似的事物

我有一个具有接近20个属性的实体,所以我想避免在搜索中写所有列名称。

我该怎么办?

kingxuyao 回答:在所有列中搜索与Spring JPA匹配的关键字

此URL(https://www.baeldung.com/rest-api-search-language-spring-data-specifications)将为您提供帮助,我已从URL复制了一些代码来向您解释。

您需要定义一个条件类

public class SearchCriteria {
    private String column;
    private String operation;
    private Object value;
}

然后,您需要定义搜索规范

public class SearchSpecification implements Specification<MyEntity> {

    private SearchCriteria criteria;

    private SearchSpecification(SearchCriteria criteria){
        this.criteria =criteria;
    }

    @Override
    public Predicate toPredicate
      (Root<User> root,CriteriaQuery<?> query,CriteriaBuilder builder) {


        if (criteria.getOperation().equalsIgnoreCase(":")) {
            if (root.get(criteria.getColumn()).getJavaType() == String.class) {
                return builder.like(
                  root.<String>get(criteria.getColumn()),"%" + criteria.getValue() + "%");
            } 
        }
        return null;
    }
}

最后,您可以通过扩展JpaSpecificationExecuto r

来修改存储库
public interface MyRepository 
  extends JpaRepository<User,Long>,JpaSpecificationExecutor<MyEntity> {}

现在您可以为您的案例创建全部二十列的规范

SearchSpecification spec1 = 
              new SearchSpecification(new SearchCriteria("column1",":","searchVal"));

SearchSpecification spec2 = 
              new SearchSpecification(new SearchCriteria("column2","searchVal"));

SearchSpecification spec3 = 
              new SearchSpecification(new SearchCriteria("column3","searchVal"));
  

然后您需要执行类似的查询

List<MyEntity> results = 
      repository.findAll(Specification.where(spec1).or(spec2).or(spec3));
,

是在所有列中搜索字符串的唯一方法 选择*从yourTable 在哪里field1喜欢'%value%'或field2喜欢'%value%'......;

本文链接:https://www.f2er.com/3167483.html

大家都在问