Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
Java 如何使用SearchCriteria类根据SpringDataJPA中用户给出的许多术语搜索用户_Java_Spring_Jpa_Search_Spring Data Jpa - Fatal编程技术网

Java 如何使用SearchCriteria类根据SpringDataJPA中用户给出的许多术语搜索用户

Java 如何使用SearchCriteria类根据SpringDataJPA中用户给出的许多术语搜索用户,java,spring,jpa,search,spring-data-jpa,Java,Spring,Jpa,Search,Spring Data Jpa,我有一个名为SearchCriteria的类,在该类中我有用户可以搜索的属性。 如何将该类与spring数据jpa一起用于搜索数据。在下面的例子中。 我正在使用JpaRepository创建存储库。 我是否也应该为SearchCriteria创建存储库,而同样的实体也不需要,或者不需要任何方法来实现这一点 @Entity class User{ @Id id; fname; lname; location; orders; post

我有一个名为
SearchCriteria
的类,在该类中我有用户可以搜索的属性。 如何将该类与spring数据jpa一起用于搜索数据。在下面的例子中。 我正在使用
JpaRepository
创建存储库。 我是否也应该为
SearchCriteria
创建存储库,而同样的实体也不需要,或者不需要任何方法来实现这一点

@Entity
class User{  

    @Id
    id;

    fname;
    lname;
    location;
    orders;
    posts;

    //getters & setters
}


class SearchCritiea {
    int radius;//search user in given diameter 
    String fname;
    int ordercount;//search users with oder count  
}

您可以使用
javax.persistence.CriteriaQuery
动态定义查询:


您可以使用规范来定义可重用谓词:

public CustomerSpecifications {

public static Specification<Customer> customerHasBirthday() {
return new Specification<Customer> {
  public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
    return cb.equal(root.get(Customer_.birthday), today);
   }
 };

参见Spring官方博客:

我必须使用SearchCriteria类我可以使用这个类吗我对数据不熟悉JPA你必须使用JPA的一个类。我怀疑你能否直接使用你的课堂@克里斯蒂安的回答似乎也很合理。我有一个表searchcriteria,它将存储搜索词,也就是一个名为searchcriteria的实体。您需要在数据库中存储搜索方法的所有用法吗?您的SearchCriteria实体模型的主要目的是什么?在数据库中需要存储用户下次喜欢搜索的内容,我想根据他上次的搜索偏好提出建议,如果这不是好的主要方法,请联系关系数据库不是最好的方法。使用lucene尝试elasticsearch文档数据库。
public static Specification<Customer> isLongTermCustomer() {
return new Specification<Customer> {
  public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
    return cb.lessThan(root.get(Customer_.createdAt), new LocalDate.minusYears(2));
    }
   };
  }
}
  customerRepository.findAll(where(customerHasBirthday()).and(isLongTermCustomer()));