JPA拼接子查询语句

public static Specification<CatDomain> listAdvanceSpec() {
        return (Root<CatDomain> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> {
           
      //创建主查询条件对象('where'后的语句对象)
      Predicate predicate = cb.conjunction();
      //创建子查询对象subQuery Subquery subQuery = query.subquery(String.class);
      //创建"实体类Hobby"的root对象
      Subquery subQuery = query.subquery(String.class);
      Root from = subQuery.from(IntentionRecord.class);
          //创建子查询条件对象('where'后的语句对象)
      Predicate predicate1 = cb.conjunction();
          predicate1 = cb.and(predicate1,cb.greaterThanOrEqualTo(from.get("createTime"), newDate2));
          predicate1 = cb.and(predicate1,cb.equal(from.get("schoolId"), dto.getSchoolId()));
      //完成子查询
          subQuery.select(from.get("studentId")).where(predicate1);
        //把子查询结果拼接到原查询语句后面---这里是id not in的写法
       predicate = cb.and(predicate, cb.not(cb.in(root.get("id")).value(subQuery)));
      //id in的写法    
       predicate = cb.and(predicate, cb.in(root.get("id")).value(subQuery));
      //id equals的写法      
      , cb.equal(root.get("id"),"123"));                        
        };
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值