Если у меня есть репозиторий Spring, я могу получить постраничные результаты, определив метод следующим образом (например):
@Query("<some JPAQL here>")
Page<Person> findBySomething(String foo, String bar, Pageable pageable);
Я бы хотел сделать то же самое, только для динамического создания запроса (сам запрос немного отличается в зависимости от некоторых входных данных). Что-то вроде:
String queryString = "<JPAQL part1>";
if (condition) queryString += "<JPAQL part2>";
queryString += "<JPAQL part3>";
Query query = entityManager.createQuery(queryString);
query.setParameter("foo", foo);
query.setParameter("bar", bar);
return query.getResultListAndApplySpringPaging(pageable);
Я не хочу переписать свой запрос в Querydsl или Criteria API. Частично потому, что я не хочу тратить на это время, а частично потому, что мой JPAQL содержит некоторые специфичные для Oracle вещи, которые может быть трудно, если не невозможно, выразить в них (например, такие вещи, как ORDER BY NLSSORT(t.displayValue, 'NLS_SORT = XCZECH') ASC
).
Есть ли способ вручную передать String
или javax.persistence.Query
через механизм подкачки Spring?