1. 程式人生 > >JPA Specification常用查詢+排序

JPA Specification常用查詢+排序

第一步:繼承父類

public interface TblCarton2RCardLogRepository extends JpaRepository<TblCarton2RCardLog, String>,JpaSpecificationExecutor<TblCarton2RCardLog> {

第二步:

tblCarton2RCardLogRepository.findAll(new Specification<TblCarton2RCardLog>() {
    @Override
    public  Predicate toPredicate(Root<TblCarton2RCardLog> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
        List<Predicate> list = new ArrayList<Predicate>();

        list.add(cb.equal(root.get("cartonNo").as(String.class), cartonNo));//某普通欄位

        list.add(cb.equal(root.get("id").get("rCard").as(String.class), rCard));//主鍵中某欄位

        list.add(cb.like(root.get("mocode").as(String.class), "%" + mocode + "%"));//like

        list.add(cb.between(root.get("frozenDate").as(Long.class), frozenDateStart, frozenDateEnd));//between and

        list.add(cb.greaterThanOrEqualTo(root.get("id").get("rcard").as(String.class), rCardStart));//大於等於

        list.add(root.get("id").get("lotNo").as(String.class).in(lotNos));//in

        //ORDER BY packdate DESC,packtime DESC
        Predicate[] p = new Predicate[list.size()];
        query.where(cb.and(list.toArray(p)));
        query.orderBy(cb.desc(root.get("packDate")),cb.desc(root.get("packTime")));

        return query.getRestriction();
    }
});