JPA 處理條件in的分頁查詢

第一種

時間:2018-11-13 17:17:47 提交 

Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());
Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    List<Predicate> list = new ArrayList<Predicate>();
    CriteriaBuilder.In<Long> in = cb.in(root.get("f").get("id"));
    for (F f : pageQueryDto.getList()) {
        in.value(f.getId());
    }
    list.add(in);
    Predicate[] p = new Predicate[list.size()];
    return cb.and(list.toArray(p));
}, pageable);

===2019年4月25日10:36:46 更新

第二種

Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());
Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    Predicate predicate = root.isNotNull();
    predicate = cb.and(predicate, cb.and(root.get("id").as(Long.class).in(pageQueryDto.getList())));
    return predicate;
}, pageable);

第三種

// pageQueryDto爲入參 可以拿到數組信息
Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());

Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    Predicate predicate = root.isNotNull();
    CriteriaBuilder.In in = cb.in(root.get("id").as(Long.class));
	for (Long id : pageQueryDto.getList()) {
		in.value(id);
	}
	predicate = cb.and(predicate, in);
    return predicate;
}, pageable);

推薦第二種做法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章