#java #spring #spring-boot #predicate #specifications
#java #spring #spring-boot #предикат #технические характеристики
Вопрос:
У меня есть одна пользовательская сущность, в которой у меня есть список ролей, теперь я хочу получить список пользователей по определенному списку пользователя, используя спецификацию Java и предикат. Кто-нибудь может мне помочь? Для справки ниже приведен код snnipet.
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 amp;amp; 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
}
Проверьте раздел ролей, в котором я передал список ролей АДМИНИСТРАТОРА. Но во время запуска он выдает мне сообщение об ошибке,
java.sql.SQLException: для параметра 4 не указано значение
Комментарии:
1. Не уверен, что это проблема, но я бы не стал использовать
cb.equal(root.get("roles"), roles))
для сравнения коллекций. Вам лучше использоватьcb.isMember
.2. Ошибка @HopeyOne Now не выдается, но из базы данных не поступает никаких записей. Есть идеи?
3. Вы можете [войти] ( baeldung.com/sql-logging-spring-boot ) ваши SQL-запросы, сгенерированные spring-boot-data с
spring.jpa.show-sql=true
помощью свойства. Затем вы можете попытаться отладить запрос к вашему базовому источнику данных.