Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在所有列中搜索与Spring JPA匹配的关键字_Spring_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

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

在所有列中搜索与Spring JPA匹配的关键字,spring,spring-boot,jpa,spring-data-jpa,Spring,Spring Boot,Jpa,Spring Data Jpa,我正在用Spring Boot构建rest服务。我一直在使用SpringDataJPA进行查询,但我愿意接受任何有助于解决我的问题的方法 我想在数据库中的任何列中找到具有匹配字符串的所有条目 类似于,FindAllBy(全部20列)(字符串参数)或SELECT*FROM AllColumns()其中parameter=“Foo” 我有一个接近20个属性的实体,因此我希望避免在搜索中写入所有列名 我如何才能做到这一点?是在所有列中搜索字符串的唯一方法 从表格中选择* 其中字段1类似于“%value

我正在用Spring Boot构建rest服务。我一直在使用SpringDataJPA进行查询,但我愿意接受任何有助于解决我的问题的方法

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

类似于,
FindAllBy(全部20列)(字符串参数)
SELECT*FROM AllColumns()其中parameter=“Foo”

我有一个接近20个属性的实体,因此我希望避免在搜索中写入所有列名


我如何才能做到这一点?

是在所有列中搜索字符串的唯一方法 从表格中选择* 其中字段1类似于“%value%”或字段2类似于“%value%”

这个URL()将帮助您,我从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;
    }
}
然后您需要执行如下查询

列出结果=
findAll(规范1.或(规范2.或(规范3));

spring data jps没有任何方法可以做到这一点。你必须写一篇文章query@pvpkiran查询是否有搜索所有列的方法?据我所知,这是否回答了您的问题?
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));