问题描述
我有一个带有任务列表(另一个实体)的实体 Order
,我需要使用规范来过滤 Order
实体和嵌套的任务列表。
示例:
Select * Order where taks.done = "S"
我需要返回已完成的订单和任务列表。
我的问题是嵌套列表,规范仅过滤实体 Order
而不是任务列表
public static Specification<Order> isDone(Indicator done) {
return new JoinableSpecification<>() {
@Override
public Predicate toPredicate(Root<Order> root,CriteriaQuery<?> cq,CriteriaBuilder cb) {
Path<Indicator> path = this.joinList(root,UsuarioProcesso_.tarefas,JoinType.INNER).get(Task.done);
return cb.equal(path,done);
}
};
}
解决方法
您可以使用规范联接。示例
(root,query,cb) ->
{
Join<Order,Task> taks = root.join(Task);
Expression<String> expression = taks.get(Task_.done);
Predicate predicate = expression.equals("s");
query.where(predicate);
return query.getRestriction();
};