Я впервые пишу здесь с просьбой о помощи, и извините, если это очень глупо, но я пробовал некоторые коды, которые я нашел, но они не работают вообще.
В нашем приложении мы Мы использовали одну строку для фильтрации состояния, но новые требования должны изменить это на Список, ограничение здесь состоит в том, что мы пытаемся использовать старый метод для обратной совместимости и сделать нашу FE более легкой для интеграции с нами.
Мой вопрос в том, можно ли использовать критерий Builder.in () для фильтрации этого, используя Список?
Здесь я публикую спецификацию, которая есть в нашей BE.
public Page<ReturnObject> findAll(final Pageable pageable, final GetRequest request) {
final Specification<ReturnObject> specification =
Specification.where(ReturnObjectSpecs.getFeNameSpec(request.getFeName())
.and(ReturnObjectSpecs.getIdSpec(request.getId()))
.and(ReturnObjectSpecs.getUserIdSpec(request.getUserId()))
.and(ReturnObjectSpecs.getStatusSpec(request.getStatus())));
return sessionRepository.findAll(specification, pageable);
}
Здесь идет предыдущая спецификация c для критериев Builder
static Specification<ReturnObject> getStatusSpec(final String status){
return (root, query, criteriaBuilder) -> StringUtils.isEmpty(status)?
criteriaBuilder.isTrue(criteriaBuilder.literal(true)):
criteriaBuilder.equal(root.get("status"), status);
}
Здесь идет речь о том, что я пытался запросить этот список.
static Specification<ReturnObject> getStatusSpec(final List<String> status) {
return (root, query, criteriaBuilder) -> {
if (status.isEmpty()) {
return criteriaBuilder.isTrue(criteriaBuilder.literal(true));
} else {
Expression<String> expression = root.get("status");
expression.in(status);
return criteriaBuilder.in(expression);
}
};
}
Вот фактическая модель, которую мы имеем
public class GetRequest {
private Long id;
private Long userId;
private List<String> status;
//Getters and setters are ignored
}
Спасибо за вашу помощь