Может ли отдельный запрос дать результаты для условных результатов при весенней загрузке? - PullRequest
0 голосов
/ 04 марта 2020

Я столкнулся с проблемой, когда я хочу, чтобы несколько результатов отображались с использованием одного запроса, а не нескольких запросов.

Допустим, таблица содержит 50 записей и 3 столбца, может потребоваться не один столбец, может быть , Когда пользователь сохраняет нулевое значение, Query1 возвращает 30 записей, когда пользователь придает ему какое-либо значение. Query2 возвращает 15 записей. Можно ли этого достичь, используя только один запрос?

Контроллер:

public Iterable<Number> getNumberRecords(@PathVariable String one, @PathVariable String two,
                                          @RequestParam(value = "three", required = false) String three) {

if(three == null)
   return numberRepository.findAllbyOneAndTwo(one,two);
else
   return numberRepository.findAllbyOneAndTwoAndThree(one,two,three);
}

Репозиторий:

@Repository
public interface NumberRepository extends CrudRepository<Number, Long>{

List<Number> findAllbyOneAndTwoAndThree(String one, String two, String three);
List<Number> findAllbyOneAndTwo(String one, String two);

}

Мне нужен только один запрос, который будет удовлетворять и давать ожидаемый результат в оба случая. Условный запрос с использованием @ Query ("") также подойдет.

1 Ответ

0 голосов
/ 08 марта 2020

Чтобы преобразовать мой комментарий в ответ, что-то вроде следующего должно охватывать то, о чем вы говорите:

public List<? extends Number> findAllByOneTwoAndThree(final String one,
                                                      final String two,
                                                      final @Nullable String three) {
    final StringBuilder queryBuilder = new StringBuilder();

    queryBuilder.append("SELECT x FROM some_table x")
            .append(" WHERE x.one = :one")
            .append(" AND x.two = :two");

    if (three != null) {
        // Only add to the query if three was NOT null.
        queryBuilder.append(" AND x.three = :three");
    }

    // etc...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...