首页 > 解决方案 > 如何在谓词 Java 中添加对列表对象的检查

问题描述

我有一个用户实体,我有一个角色列表,现在我想使用 Java 规范和谓词按用户的特定列表获取用户列表。谁能帮我吗?以下是代码片段供参考。

public List<Users> findByPagingCriteria(SearchModel searchModel, Pageable pageable) {
        Page page = userRepository.findAll(new Specification<Users>() {

            @Override
            public Predicate toPredicate(Root<Users> root, javax.persistence.criteria.CriteriaQuery<?> query,
                    CriteriaBuilder cb) {
                List<Predicate> predicates = new ArrayList<>();
                if (searchModel.getName() != null) {
                    predicates.add(cb.or(cb.like(root.get("firstName"), "%" + searchModel.getName() + "%"),
                            cb.like(root.get("lastName"), "%" + searchModel.getName() + "%")));
                }
                if (searchModel.getId() != null) {
                    predicates
                            .add(cb.and(cb.equal(root.get("adminDetails").get("adminUniqueId"), searchModel.getId())));
                }
                if (searchModel.getRole() != null && searchModel.getRole().equalsIgnoreCase("admin")) {
                    List<Role> roles = Arrays.asList(Role.builder().name("ROLE_ADMIN").build());

                    predicates.add(cb.and(cb.equal(root.get("roles"), roles)));
                }
                return cb.and(predicates.toArray(new Predicate[predicates.size()]));
            }
        }, pageable);

        page.getTotalElements(); // get total elements
        page.getTotalPages(); // get total pages
        return page.getContent(); // get List of Employee
    }

检查角色部分,因为我已经通过了 ADMIN 角色列表。但是在运行时它会抛出一个错误说,

java.sql.SQLException:没有为参数 4 指定值

标签: javaspringspring-bootpredicatespecifications

解决方案


推荐阅读