81,122
社区成员




public Page<Article> getArticles(Map<String, Object> searchParams, int pageNumber, int pageSize,
String sortType) {
PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
// Specification<Article> spec = buildSpecification(null, searchParams);
Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
// filters.put("user.id", new SearchFilter("user.id", Operator.EQ, userId));
Specification<Article> spec = DynamicSpecifications.bySearchFilter(filters.values(), Article.class);
return articleDao.findAll(spec, pageRequest);
}
/**
* 创建分页请求.
*/
private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
Sort sort = null;
if ("auto".equals(sortType)) {
sort = new Sort(Direction.ASC, "title");
} else if ("title".equals(sortType)) {
sort = new Sort(Direction.ASC, "title");
}
return new PageRequest(pageNumber - 1, pagzSize, sort);
}
A中关联Bid和Cid Cid对应多个Bid 现在又参数Cid 需要查询对应的Bid 也就是多表查询,但是还需要分页功能 也就是说参数可能会有个page。[/quote]
我没用过Specification作为查询条件什么的, 都以前用过都是通过 @Query 指定查询的jpql。
像这样:
@Query("select a.b from A a where a.c.id = ?1")
Page<B> findAll(Long cid, Pageable pageRequest);
可能不试用你这种情况! 不过你可以尝试按我的方式修改试试
public Page<Article> getArticles(Map<String, Object> searchParams, int pageNumber, int pageSize,
String sortType) {
PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
// Specification<Article> spec = buildSpecification(null, searchParams);
Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
// filters.put("user.id", new SearchFilter("user.id", Operator.EQ, userId));
Specification<Article> spec = DynamicSpecifications.bySearchFilter(filters.values(), Article.class);
return articleDao.findAll(spec, pageRequest);
}
/**
* 创建分页请求.
*/
private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
Sort sort = null;
if ("auto".equals(sortType)) {
sort = new Sort(Direction.ASC, "title");
} else if ("title".equals(sortType)) {
sort = new Sort(Direction.ASC, "title");
}
return new PageRequest(pageNumber - 1, pagzSize, sort);
}
A中关联Bid和Cid Cid对应多个Bid 现在又参数Cid 需要查询对应的Bid 也就是多表查询,但是还需要分页功能 也就是说参数可能会有个page。
@Query("select a.b from A a where a.c.id = ?1")
?1 占位符对应findAll方法的第一个入参。
我也没怎么用过spring data jpa 你理解一下,试试行不行。