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()));