You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring JPA分页查询中过滤is_deleted为true的Skill实体?

实现分页查询时过滤已删除的Skill数据

这里有几种简单直接的实现方式,你可以根据需求选择:

1. 利用Spring Data JPA的方法名推导(最简便)

直接修改原有的分页查询方法名,通过方法名自动生成过滤条件:

public interface SkillRepository extends JpaRepository<Skill, Long> {
    // 过滤is_deleted=true的数据,同时按displayOrder升序分页查询
    Page<Skill> findAllByIsDeletedFalseOrderByDisplayOrderAsc(Pageable pageable);
}

Spring Data JPA会自动解析方法名,生成包含WHERE is_deleted = false条件的SQL,同时保留原有的排序和分页逻辑。

2. 自定义JPQL查询(适合复杂场景)

如果需要更灵活的查询逻辑,可以用@Query注解写自定义JPQL:

public interface SkillRepository extends JpaRepository<Skill, Long> {
    @Query("SELECT s FROM Skill s WHERE s.isDeleted = false ORDER BY s.displayOrder ASC")
    Page<Skill> findAllNonDeletedSkills(Pageable pageable);
}

这种方式可以手动控制查询语句,适合后续需要添加更多过滤条件的场景。

3. 使用Specification实现动态过滤(适合多条件动态组合)

如果后续可能需要动态添加其他过滤条件,可以用Specification来封装过滤逻辑:
首先定义一个获取过滤Specification的方法:

public class SkillSpecifications {
    public static Specification<Skill> nonDeleted() {
        return (root, query, criteriaBuilder) -> 
            criteriaBuilder.equal(root.get("isDeleted"), false);
    }
}

然后在业务层调用时传入这个Specification:

// 业务层调用示例
Page<Skill> skills = skillRepository.findAll(
    SkillSpecifications.nonDeleted(),
    PageRequest.of(pageNum, pageSize, Sort.by(Sort.Direction.ASC, "displayOrder"))
);

这种方式的优势是可以灵活组合多个过滤条件,比如后续要加名称模糊查询,直接新增一个Specification并组合即可。

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:20:24