Создание критериев по И или Или во время выполнения репозиторием JPA - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно создать запрос, выбрав время выполнения. В основном у меня мало параметров, и один из них укажет, следует ли мне использовать И или Или, чтобы объединить критерии. Используя Spring JPA Repository, как я могу это сделать? Это легко сделать для параметров:

@Query(value = "SELECT u FROM User u WHERE u.name IN :names")
List<User> findUserByNameList(@Param("names") Collection<String> names);

Но если я хочу добавить еще один критерий, скажем, размер, и мне нужно решить, какой из (И, ИЛИ) использовать для объединения критериевкак мне это сделать?

Пример:

  SELECT u FROM User u WHERE u.name IN :names OR/AND size = 10; 

1 Ответ

0 голосов
/ 23 октября 2019
public List<User> getUsers(List<String> names, Integer size, boolean useOrPredicate) {

        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
        Root<User> user = criteriaQuery.from(User.class);

        Predicate predicate1 = user.get("name").in(names);
        Predicate predicate2 = criteriaBuilder.equal(user.get("size"), size);

        Predicate predicate;

        if(useOrPredicate) 
           predicate = criteriaBuilder.or(predicate1, predicate2);
        else
           predicate = criteriaBuilder.and(predicate1, predicate2);

        criteriaQuery.where(predicate);

        return entityManager.createQuery(criteriaQuery).getResultList();
}
...