我们知道添加下面这样查询条件很容易,只是比较一个字段的:
Predicate p = builder.equal(root.get("age"), 30);
如果 需要添加的条件是,假如表是t,字段aaa 是总月数,字段bbb是已过去的月数
我们要查询 剩余月数是3的记录,如何添加 t.aaa-t.bbb = 3 这样的查询条件?
或者添加 t.aaa > t.bbb 这样的条件?
我们知道添加下面这样查询条件很容易,只是比较一个字段的:
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()]));
};