如何使用谓词在 JPA 中构建 "IN" 子句?

How to build an "IN" clause in JPA using Predicates?

我想通过 "Role" 和 "Id" 的列表对 return 我的数据进行查询,但我不太了解语法应该如何。

我试图按照仅使用 "equal" 子句的工作示例进行操作,但它不起作用。代码如下

public static Specification<CustomerUser> findByIdsAndRole(List<Long> ids, String role) {
    return new Specification<CustomerUser>() {

        private static final long serialVersionUID = -3381908547196927973L;

        public Predicate toPredicate(Root<CustomerUser> root, CriteriaQuery<?> query, CriteriaBuilder builder) {

            List<Predicate> predicates = new ArrayList<>();

            if (ids != null) {
                predicates.add(builder.in(root.get("id"), ids));
                predicates.add(builder.equal(root.get("role"), role));
            }

            return builder.and(predicates.toArray(new Predicate[0]));
        }
    };
}

它给我一个错误,它告诉我从中删除参数 "ids"。但是如果我 运行 这样的代码,我会得到这个错误日志:

org.postgresql.util.PSQLException:错误:“)”处或附近的语法错误

请尝试predicates.add(root.get("id").in(ids)));