用Specification组装查询条件时,如何添加两个字段比较或加减运算的查询条件?

我们知道添加下面这样查询条件很容易,只是比较一个字段的:

Predicate p = builder.equal(root.get("age"), 30);

如果 需要添加的条件是,假如表是t,字段aaa 是总月数,字段bbb是已过去的月数

我们要查询 剩余月数是3的记录,如何添加 t.aaa-t.bbb = 3 这样的查询条件?

或者添加 t.aaa > t.bbb 这样的条件?


Specification<Object> spec = (Specification<Object>) (root, criteriaQuery, cb) -> {
    List<Predicate> list = new ArrayList<>();
    list.add(cb.equal(cb.diff(root.get("aaa"), root.get("bbb")), 3));

    return cb.and(list.toArray(new Predicate[list.size()]));
};