首页 > 解决方案 > JPA 规范 - 过滤嵌套列表对象

问题描述

我有一个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);
            }
        };
    }

标签: javaspring-data-jpaspecifications

解决方案


您可以使用规范连接。例子

(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();
        };

推荐阅读