@Override public Specification<MainOrder> specification() { return new AndSpecification<>( mainOrderService.search(orderId, mobile, goodId, orderDate, null, null, status) , (root, query, cb) -> { final Join<MainOrder, PayOrder> payOrder = root.join("payOrder"); Predicate predicate = cb.and( cb.isNotNull(payOrder), cb.equal(payOrder.type(), TRJPayOrder.class) ); if (StringUtils.isEmpty(mortgageCode)) return predicate; return cb.and(predicate , cb.like(cb.treat(payOrder, TRJPayOrder.class) .join("authorisingInfo").get("id"), "%" + mortgageCode + "%") ); } ); } };