我有一个名为SearchCriteria
的类,其中有一些用户可以搜索的属性。
如何将此类与spring data 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
}
答案 0 :(得分:0)
您可以使用javax.persistence.criteria.CriteriaQuery
动态定义查询:
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
答案 1 :(得分:0)
您可以使用“规范”来定义可重复使用的谓词:
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);
}
};
}
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));
}
};
}
}
现在您可以使用与AND或NOT NOT OPERATION链接的谓词:
customerRepository.findAll(where(customerHasBirthday()).and(isLongTermCustomer()));
请参阅春季官方博客条目:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/